我正在创建一个用户登录名。我能够让用户注册,并且在用户说出密码时将其加密后再保存到数据库中。
当同一用户尝试登录时,我得到的是“无效密码”。
这是因为它将用户输入与数据库中的加密密码进行了比较。例如,如果密码为1234,则在数据库中将其另存为“$ 2a $ 104 $ 0301”。当用户尝试登录时,会将用户输入“1234”与“2a $ 104 $ 0301”进行比较。我该如何解决?
这是我的登录代码:
var LocalStrategy = require('passport-local').Strategy;
var User = require('../Models/users.js');
var bcrypt = require('bcrypt-nodejs');
module.exports = function(passport){
passport.use('login', new LocalStrategy({
passReqToCallback : true
},
function(req, username, password, done){
User.findOne({'username' : username},
function(err, user){
if(err)
return done(err);
if(!user){
console.log('User Not Found with username: '+username);
return done(null, false,
req.flash('message', 'User Not Found.'));
}
if (!isValidPassword(user, password)){
console.log('Invalid Password');
return done (null, false,
req.flash('message', 'Invalid Password'));
}
return done(null, user);
}
);
})
);
var isValidPassword = function(user, password){
var result = bcrypt.compareSync(password, user.password);
if (result) {
console.log("Password correct");
} else {
console.log("Password wrong");
}
return result;
}
}
最佳答案
compareSync
方法仅接受2个参数,并返回 bool 值true
或false
。
您应该执行如下检查:
var result = bcrypt.compareSync(password, user.password);
if (result) {
console.log("Password correct");
} else {
console.log("Password wrong");
}