节点bCrypt.compareSync

我正在创build一个用户login。 我可以让用户注册,当用户在密码保存到数据库之前对密码进行了encryption。

当同一个用户尝试login时,我得到一个“无效的密码”。

这是因为它将用户input与数据库中的encryption密码进行比较。 例如,如果密码是1234,那么在数据库中它被保存为“$ 2a $ 104 $ 0301”。 当用户尝试login时,将“1234”的用户input与“2a $ 104 $ 0301”进行比较。 我将如何解决?

这是我的login代码:

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个参数,并返回一个布尔值truefalse

你应该像这样执行检查:

 var result = bcrypt.compareSync(password, user.password); if (result) { console.log("Password correct"); } else { console.log("Password wrong"); }