bcrypt' cb不是一个功能'错误

时间:2017-11-03 09:16:14

标签: javascript node.js mongodb bcrypt

(假设哈希已经完成)我正在尝试通过比较输入的密码及其在我的MongoDB集合中的哈希来进行身份验证用户功能。这是我的model.js中的方法(从bcrypt指南中复制):

PetOwnerSchema.methods.comparePassword = function(candidatePassword, cb) {
    bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
        if (err) return cb(err);
        cb(null, isMatch);
    });
};

我的controller.js:

exports.check = function (req, res) {
  var email = req.body['email'];
  var password = req.body['password'];

  PetOwner.findOne({ "email" : email}, 'email', function(err, task) {
    if (err)
      res.send(err);
    if ( task === null ){
      res.json(0); // no matching result
      console.log("Email is not yet registered");
    } else {

      task.comparePassword(password, task.password, function(err, isMatch) { //compare password and the already-hashed password in MongoDB
       if (err) throw err;

       if(isMatch){
           res.json(1);
           console.log("Found matching password to email");
       }
       else{
           res.json(0);
           console.log("Wrong password");
       }
      });   

    }
  })
};

当我获取check方法时,节点控制台会提示我的model.js中的cb不是函数的错误。我已经尝试了几种解决方法但到目前为止还没有工作。有没有办法调试这个?

1 个答案:

答案 0 :(得分:0)

PetOwnerSchema.methods.comparePassword = function(candidatePassword, cb)

您的函数只接受一个参数,因此您无法参考"这个"在函数之外,就像使用" this.password"。

一样

如果您将要比较的密码添加为第二个参数,如下所示:

PetOwnerSchema.methods.comparePassword = function(candidatePassword, password2, cb)

然后你可以按照你想要的那样比较函数内部的两个。

希望有所帮助