postgresql - Bcrypt 无效盐和 Postgresql

标签 postgresql python-3.x flask flask-sqlalchemy bcrypt

我有一个小的 Flask 应用程序 (Python3),它开始变得有点复杂,所以我决定从 SQLite 切换到 Postgresql。我知道这会给我带来一些问题,但我的代码库有不错的测试覆盖率,所以我有信心在投入生产之前解决所有问题。

特别是,在我输入密码的任何地方,我都必须进行编码 (password.encode('utf-8'))。

(顺便说一句,时区是我遇到的另一个问题。我最终从我使用的任何日期中删除了时区。)

但只有最后一个错误我无法弄清楚。为了测试密码是否已更新,我进行了以下测试:

self.assertTrue(bcrypt.check_password_hash(
    user.password, new_password
))

这应该根据 new_password 检查当前密码(当我打印它时它看起来像字节串)。但是我收到一条错误消息 ValueError: Invalid salt

我很想知道如何解决这个问题,但我也希望有人能解释这里发生了什么。

最佳答案

原来问题出在我保存密码的方式上。在这种特殊情况下,我应该像这样保存密码:

user.password = bcrypt.generate_password_hash(
        request.form['password']
).decode('utf-8')

db.session.commit()

现在上面的测试成功了。

关于postgresql - Bcrypt 无效盐和 Postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41655394/

相关文章:

python - 每次调用 authenticate() 后用户密码都会改变

postgresql - 在 PostgreSQL 中将 varchar 更改为 boolean

python-3.x - 检查 Python 列表元素是否在 Pandas 数据框行中

python - 遍历 xarray 数据集中的 dataArray 属性

python - 我怎样才能制作一个 Python 包来为带有 Flask 的网站提供服务以与 Apache 一起工作?

python - Flask-SQLAlchemy 数据模型关系问题

postgresql - Postgresql如何在时间戳中舍入半微秒?

node.js - 一个应用程序中的不同变量名称大小写约定

python - 如何通过Panda导入几年但特定月份的数据?

python - 在 Python Flask 中维护 session 数据