Node js - Bcrypt - 比较方法 returns false 为正确的输入密码
Node js - Bcrypt - compare method returns false for the correct input password
我在这里遇到过各种类似的问题,我都试过了,但结果总是"wrong password"。
我正在为 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 : function(password){
如果添加解决了您的问题,请尝试将其更改为
validPassword : function(password, callBack){
此外,我不知道你的 validPassword
函数在哪里,但你可能想检查一下 this.password
是否确实引用了用户密码。
我刚刚解决了这个问题。大声笑这是一系列的错误,使这很难弄清楚。所以我只是要列举必须做些什么来避免这样的事情:
hash
必须作为 varchar
而不是 char
存储在数据库中。 latest 导致散列的长度不正确,因此比较将失败。 varchar
是这个问题的解决方案。
- 处理比较结果必须在回调函数内部完成。这是由于 nodejs 是异步的。这是正确的(见问题中的代码)我只是想指出来。否则,比较的结果将是
undefined
.
我希望这对你们中的一些人有所帮助。
我在这里遇到过各种类似的问题,我都试过了,但结果总是"wrong password"。
我正在为 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 : function(password){
如果添加解决了您的问题,请尝试将其更改为
validPassword : function(password, callBack){
此外,我不知道你的 validPassword
函数在哪里,但你可能想检查一下 this.password
是否确实引用了用户密码。
我刚刚解决了这个问题。大声笑这是一系列的错误,使这很难弄清楚。所以我只是要列举必须做些什么来避免这样的事情:
hash
必须作为varchar
而不是char
存储在数据库中。 latest 导致散列的长度不正确,因此比较将失败。varchar
是这个问题的解决方案。- 处理比较结果必须在回调函数内部完成。这是由于 nodejs 是异步的。这是正确的(见问题中的代码)我只是想指出来。否则,比较的结果将是
undefined
.
我希望这对你们中的一些人有所帮助。