我在这里经历过各种类似的问题,我都试过了,但结果总是“密码错误”。
我正在为 nodejs 使用 bcrypt,我的密码哈希存储在 Postgresql 数据库中。
hash
和compare
方法如下:
generateHash : function(password, callBack){
bcrypt.genSalt(8, function(err, salt) {
bcrypt.hash(password, salt, callBack);
});
}
validPassword : function(password, callBack){
bcrypt.compare(password, this.password, callBack);
}
我在下面的代码中使用了这些函数:
//Generating hashing and DB storing
User.generateHash(password, function(err, hash) {
// if there is no user with that email
// create the user
var newUser = User.build({
email: email,
password: hash
})
.save()
.then(function(newUser) {
return done(null, newUser);
})
.catch(function(err){
return done(err, false);
});
});
//...
//Checking the password input for login
user.validPassword(password, function(err, res) {
if(err) throw err;
if(!res){
return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.'));
}
else{
// all is well, return successful user
return done(null, user);
}
});
我希望这很清楚。提前致谢。再见。
更新 I: callBack
添加到 validPassword
,尽管这并没有解决问题。而且我还检查了 this.password
值,它是正确的并且符合预期。所以,问题依然存在。
最佳答案
我想你忘了将 callBack
作为参数添加到
validPassword : 函数(密码){
尝试添加是否可以解决您的问题,因此将其更改为
validPassword : function(password, callBack){
另外,我不知道你的 validPassword
函数在哪里,但你可能想检查 this.password
是否确实引用了用户密码。
关于node.js - Node js - Bcrypt - 比较方法为正确的输入密码返回false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36295697/