gpt4 book ai didi

javascript - bcrypt compare 当密码包含数字时返回 false

转载 作者:搜寻专家 更新时间:2023-10-31 23:09:20 26 4
gpt4 key购买 nike

我正在使用 node-bcrypt与 PostgreSQL 一起(通过 Sequelizejs 来散列和保存密码。

用户的密码在 beforeValidate Hook 中进行哈希处理,如下所示:

beforeValidate: function(user, model, cb) {
bcrypt.hash(user.password, 10, function(err, hash) {
if ( err ) { throw err; }
user.password = hash;
cb(null, user);
});
}

存储哈希的用户模型列定义为:

password: { type: DataTypes.STRING, allowNull: false }

当用户登录时(我使用 Passport 进行身份验证),函数如下所示:

passport.use(new LocalStrategy(function(username, password, done) {
models.User.find({ username: username }).then(function(retrievedUser) {
if ( !_.isEmpty(retrievedUser) ) {
retrievedUser.verifyPassword(password, function(err, result) {
if ( err || !result ) {
return done(null, false, { message: 'Incorrect password.' });
} else {
return done(null, retrievedUser);
}
});
} else {
return done(null, false, { message: 'User could not be found at that username.' });
}
}).catch(function(err) {
return done(err);
});
}));

正确检索用户。

以及在此处定义在用户模型上的比较:

instanceMethods: {
verifyPassword: function(password, cb) {
bcrypt.compare(password, this.password, cb);
}
}

如果密码仅包含字母和/或符号,则验证会顺利通过。但是,任何带数字的密码都不会通过比较。有什么想法吗?

最佳答案

在您的 beforeValidate 函数中,您传入 10 作为生成盐所需的盐,将该函数更改为此

beforeValidate: function(user, model, cb) {
var salt = bcrypt.genSalt(10);
bcrypt.hash(user.password, salt, function(err, hash) {
if ( err ) { throw err; }
user.password = hash;
cb(null, user);
});
}

关于javascript - bcrypt compare 当密码包含数字时返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27044742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com