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

标签 python python-2.7 sqlalchemy

如何使用函数在 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.orgsha256_crypt.encrypt("password_string") 存储密码/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) 生成的值与数据库中相同的密码不同,我不能仅使用 == 运算符 sha256_crypt.verify 来自网站) 如何在我的查询中注入(inject)这个?

最佳答案

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

如果您查看此函数的输出示例,以及 documentation for "modular crypt format" :

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

关于python - 如何使用函数在 sqlalchemy 查询中验证密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15978279/

相关文章:

mysql - Django Mysql 连接池

python - 属性错误: 'Engine' object has no attribute 'conn'

python - 如何编写 setup.py 来安装除一个子模块之外的包?

python - pymongo按日期排序

python - 如何使用 Python 将表格从 CSV 写入 PDF

python - Selenium Webdriver Python 如何从所有复选框中删除勾号(如果它们被勾选)

Python 2.7.1 : How to Open, 编辑并关闭 CSV 文件

python - 我应该使用 "self"来定义不需要从外部访问的类实例化变量/对象吗?

python - "Dependency rule tried to blank-out primary key column"可能是什么原因

python - 如何将字符串值传递给情感分析 RNN 序列模型并获取预测