在尝试在flask中编写登录功能时,我想尝试对b烧瓶进行“ 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'是唯一的区别,这可能是引起问题的原因,但我不知道这是什么。
有什么想法吗?
答案 0 :(得分:1)
来自http://flask-bcrypt.readthedocs.io/en/latest/
$host = $rSelectInfoRef->[0][2];
my %args = (
user => $rSelectInfoRef->[0][3],
password => $rSelectInfoRef->[0][4],
);
my $sftp;
eval {
$sftp = Net::SFTP->new($host, %args);
};
if( $@ ) {
print "[ERROR] $@";
exit -1;
}
在您的情况下,反向功能需要对照密码检查哈希值 user.password实际上应该是hashPwd
pw_hash = bcrypt.generate_password_hash('hunter2')
bcrypt.check_password_hash(pw_hash, 'hunter2') # returns True