Bcrypt无效盐值和Postgresql

3
我有一个小的Flask应用程序(Python3),它变得有点复杂,所以我决定从SQLite切换到Postgresql。我知道这会给我带来一些问题,但我的代码库有良好的测试覆盖率,因此我有信心在推向生产之前消除任何问题。
特别是,无论我输入密码的地方,都必须进行编码(password.encode('utf-8'))。
(另外,时区是我遇到问题的另一个领域。最终,我删除了我使用的任何日期中的时区。)
但是,我只剩下一个无法解决的bug。为了测试密码是否已更新,我有以下测试:
self.assertTrue(bcrypt.check_password_hash(
    user.password, new_password
))

这应该检查当前密码 (当我打印它时,它看起来像一个字节字符串) 是否与new_password相匹配。但是我收到一个错误消息,说ValueError:无效的盐

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

1个回答

5

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

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

db.session.commit()

现在以上测试已经可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接