bcrypt.compareSync(密码,this.password);此方法返回false

时间:2017-06-18 09:47:49

标签: bcrypt

bcrypt compareSync此方法始终返回false。即使密码与db字段匹配。为什么它返回false我的代码中的错误是什么?

        **//route for login backend

    router.post('/authenticate',function(req,res){
            User.findOne( { username:req.body.username } ).select('email username password').exec(function(err, user){
              if(err) throw err;
              if(!user){
                res.json({"success":false,"message":"authentication failed"});
              }
              else if(user){
                   var validPassword = user.comparePassword(req.body.password);

            if(!validPassword){
                  res.json({"success":false,"message":"couldnot asuthenticate"});
                } else{
                  res.json({"success":true,"message":"authenticated"});
                }
              }
        })
          });


        //compare function

        UserSchema.methods.comparePassword = function(password)
        {
          return bcrypt.compareSync(password, this.password);
        };**

更新

1.我的错误是在我使用的预保存中间件

2.错误导致

UserSchema.pre('save', function(next) {
var user = this;
bcrypt.hash(user.password, null,null, function(err, hash) {
if(err) return next(err);
user.password = hash;
 });
 next();
});

3.下一个();函数在我的哈希函数之外调用。这就是我的比较结果总是错误的原因。

4.应该是:

UserSchema.pre('save', function(next) {
var user = this;
bcrypt.hash(user.password, null,null, function(err, hash) {
if(err) return next(err);
user.password = hash;
 next();

});

});

0 个答案:

没有答案