【发布时间】:2018-06-22 23:41:04
【问题描述】:
在尝试在烧瓶中编写登录功能时,我想尝试“bcrypt”烧瓶扩展。当我使用_bcrypt.check_password_hash()_ 方法将用户表单输入密码与用户在数据库中保存的密码进行比较时,它总是返回false。
这是我用来生成密码的代码:
hashPwd = bcrypt.generate_password_hash('form.password.data')
这是我用来检查候选密码和保存密码的代码:
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user and bcrypt.check_password_hash(user.password, form.password.data):
login_user(user, remember=form.rememberMe.data)
如果我在 python shell 中执行User.query.get(1).password,密码格式为:
u'$2b$12$JOXUftWBbn/egABOkAYNwezGKfh6GzIHOofUnvx73AiSOfoNWEGFC'
当我在代码中运行相同的查询时,密码是:
$2b$12$JOXUftWBbn/egABOkAYNwezGKfh6GzIHOofUnvx73AiSOfoNWEGFC
第一个 pw 中的 u' 是唯一的区别,这可能是问题原因,但我不知道它是什么。
有什么想法吗?
【问题讨论】:
-
您需要检查密码的哈希值,而不是用户输入的纯文本密码。