我在这里遇到了各种类似的问题,我尝试了所有这些问题,但结果仍然是“密码错误”。
我正在使用bcrypt作为nodejs,我的密码哈希值存储在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);
}
});
我希望这很清楚。提前致谢。侨
更新我: callBack
已添加到validPassword
,但这并未解决问题。我还检查了this.password
值,这是正确的和预期的。所以,问题仍然存在。
答案 0 :(得分:1)
我想您忘记将callBack
作为参数添加到
validPassword : function(password){
尝试添加可以解决您的问题,请将其更改为
validPassword : function(password, callBack){
此外,我不知道您的validPassword
功能在哪里,但您可能想要检查this.password
是否确实引用了用户密码。
答案 1 :(得分:1)
hash
必须以varchar
存储在数据库中,而不是char
。最新导致散列的长度不正确,因此比较将失败。 varchar
是解决此问题的方法。undefined
。我希望这会对你们中的一些人有所帮助。