Хранение и проверка зашифрованного пароля для входа в Pyramid

Я пытаюсь подтвердить зашифрованный пароль дляlogin цели в пирамиде. Так что, если имя пользователя и пароль совпадают, система авторизует пользователя. В настоящее время мне трудно написать функцию для сравнения паролей, когда один из них зашифрован в базе данных и пароль вводится в Пирамиде.login Форма не зашифрована. В данный момент у меня нет подтверждения в представлении входа в систему.

Я новичок во всем этом процессе работы с мерами безопасности / кодом и хочу сделать это правильно. Я смотрел на этоАут учебникОднако шифрование вUser класс немного отличается, и я использую Auth kit Pyramid. Любое руководство о том, как сделать это успешно и умно, будет высоко оценено.

Программное обеспечение: Python 2.7.9, Pyramid 1.5.7, SQLAlchemy 1.0.9

класс базы данных:

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)

Просмотры

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

Ответы на вопрос(2)

Ваш ответ на вопрос