Speichern und Überprüfen des verschlüsselten Passworts für die Anmeldung bei Pyramid
Ich versuche, ein verschlüsseltes Passwort für @ zu validierelogin
Zwecke in der Pyramide. Wenn also Benutzer und Passwort übereinstimmen, autorisiert das System den Benutzer. Im Moment finde ich es schwierig, eine Funktion zum Vergleichen von Passwörtern zu schreiben, wenn eines in der Datenbank verschlüsselt ist und das Passwort in Pyramid's @ eingegeben wirlogin
form ist unverschlüsselt. Momentan wird in der Anmeldeansicht keine Bestätigung angezeigt.
Ich bin neu in diesem gesamten Prozess der Arbeit mit Sicherheitsmaßnahmen / Code und möchte dies richtig machen. Ich habe mir dieses @ angesehAuth Tutorial, aber die Verschlüsselung imUser
class ist etwas anders und ich benutze Pyramid's Auth kit. Jede Anleitung, wie dies erfolgreich und intelligent durchgeführt werden kann, wäre sehr dankbar.
Software: Python 2.7.9, Pyramid 1.5.7, SQLAlchemy 1.0.9
Datenbankklasse:
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(15), nullable=False, unique=True)
email = Column(String(300))
password = Column(String(300), nullable=False)
def __init__(self, username, password, email):
self.username = username
self.password = hashlib.sha224(password).hexdigest()
self.email = email
def __repr__(self):
return "<User(username ='%s', password='%s', email='%s')>" % (self.username, self.password, self.email)
views
@view_config(route_name='login', renderer='templates/login.jinja2')
@forbidden_view_config(renderer='templates/login.jinja2')
def login(request):
login_url = request.route_url('login')
referrer = request.url
if referrer == login_url:
referrer = '/' # never use the login form itself as came_from
came_from = request.params.get('came_from', referrer)
message = ''
login = ''
password = ''
if 'form.submitted' in request.params:
login = request.params['login']
password = request.params['password']
user = api.retrieve_user(login) # need some way to validate password
if user is not None: # need to check user/password here, redirect if wrong
headers = remember(request, login)
return HTTPFound(location = came_from,
headers = headers)
message = 'Failed login'
return dict(
message = message,
url = request.application_url + '/login',
came_from = came_from,
login = login,
password = password,
)