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,
        )

Antworten auf die Frage(4)

Ihre Antwort auf die Frage