1

如何使用函数在 sqlalchemy 查询中验证密码?在

class PersonModel(Base):
    __tablename__ = 'persons'
    username = Column(String(30), nullable=False)
    email = Column(String(75), nullable=False)
    password = Column(String(128), nullable=False)

sha256_crypt.encrypt("password_string")我使用http://pythonhosted.org /passlib/存储密码,我可以验证sha256_crypt.verify(password_to_check_against, hash)

(尝试过

person = session.query(PersonModel).filter(and_(PersonModel.username.like(username), PersonModel.password.like(sha256_crypt.encrypt(password_string)))).first()

但它不起作用 => sha256_crypt.encrypt(password_string) 生成的值与 db 中相同的密码不同,我不能==仅使用sha256_crypt.verify站点中的运算符)如何在我的查询中注入它?

4

1 回答 1

5

您需要使用sha256_crypt.verify(),并且不能在AND子句中使用,因为它需要密码哈希字符串进行验证。

如果您查看此函数的输出示例以及“模块化加密格式”的文档

$5$rounds=80000$zvpXD3gCkrt7tw.1$QqeTSolNHEfgryc5oMgiq1o8qCEAcmye3FoMSuvgToC

所以它实际上需要所有前三个部分,加上纯文本密码以同样的方式散列它。

为此,首先获取您的用户信息:

person = session.query(PersonModel).filter(PersonModel.username.like(username)).first()

然后进行验证:

is_authenticated = sha256_crypt.verify(password_string, person.password)
于 2013-04-12T18:27:18.907 回答