烧瓶bcrypt.check_password_hash()始终返回False,无法发现我的错误

时间:2018-06-22 15:29:58

标签: python flask bcrypt

在尝试在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'是唯一的区别,这可能是引起问题的原因,但我不知道这是什么。

有什么想法吗?

1 个答案:

答案 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