如何在sqlalchemy查询中使用函数验证密码? 在
class PersonModel(Base):
__tablename__ = 'persons'
username = Column(String(30), nullable=False)
email = Column(String(75), nullable=False)
password = Column(String(128), nullable=False)
我使用http://pythonhosted.org / passlib /中的sha256_crypt.encrypt("password_string")
来存储密码,我可以使用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
如何在我的查询中注入此内容?
答案 0 :(得分:5)
您需要使用sha256_crypt.verify()
,而无法在AND
子句中执行此操作,因为它需要密码哈希字符串进行验证。
如果您查看此函数的输出示例以及documentation for "modular crypt format":
$ 5 $轮= 80000 $ $ zvpXD3gCkrt7tw.1 QqeTSolNHEfgryc5oMgiq1o8qCEAcmye3FoMSuvgToC
5
开头的rounds=80000
。$
是多少次哈希。person = session.query(PersonModel).filter(PersonModel.username.like(username)).first()
' s之间的下一部分是盐。所以它实际上需要前三个部分,加上纯文本密码以相同的方式散列它。
要执行此操作,请先获取用户的信息:
is_authenticated = sha256_crypt.verify(password_string, person.password)
然后进行验证:
{{1}}