Bcrypt 无效盐和 Postgresql

ham*_*nan 3 postgresql bcrypt flask python-3.x flask-sqlalchemy

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

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

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

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

self.assertTrue(bcrypt.check_password_hash(
    user.password, new_password
))
Run Code Online (Sandbox Code Playgroud)

这应该检查当前密码(当我打印它时,它看起来像一个字节刺)与new_password. 但我收到一条错误消息ValueError: Invalid salt

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

ham*_*nan 5

所以事实证明问题出在我保存密码的方式上。在这个特殊情况下,我应该像这样保存密码:

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

db.session.commit()
Run Code Online (Sandbox Code Playgroud)

现在上面的测试有效了。