Bcrypt.compare()仅返回false,在承诺下使用

时间:2018-08-08 14:25:46

标签: node.js express bcrypt

我正在使用Bcrypt对密码进行哈希处理并将其存储在数据库中,

当我从数据库中检索散列的密码并将其与键入的用户密码进行比较时,Bcrypt返回false。

我在Promise下使用它,但是bcrypt使用正确的密码返回了false

代码如下:

userSchema.statics.findByCredentials = function(email, password) {
const User = this;

return User.findOne({email}).then((user) => {
    if(!user) {
        return Promise.reject();
    }
    // console.log(user.password);

    return new Promise((resolve, reject) => {
        bcrypt.compare(password, user.password, (err,res) => {
             if(res) {
                 resolve(user);
             }
             else {
                 reject("Problem here");
             }
            console.log(res);

        });            
    });
});

};

我正在尝试将诺言链链接到主文件(即server.js),并将详细信息返回给用户,但是它不起作用。

这是快递的路线代码:

app.post('/users/login', (req, res) => {
const body = _.pick(req.body, ['email', 'password']);
// res.send(body);

User.findByCredentials(body.email, body.password)
    .then((user) => {
        res.send(user);
    }).catch((e) => res.send(e));

});

谢谢

1 个答案:

答案 0 :(得分:0)

您是否尝试过将bcrypt的{​​{3}}使用?

它可能看起来像这样:

userSchema.statics.findByCredentials = function(email, password) {
  const User = this;

  return User.findOne({email}).then((user) => {
      if(!user) {
          return Promise.reject();
      }
      // console.log(user.password);

      return bcrypt.compare(password, user.password)
        .then(res => {
          if (res) {
            return user;
          }
          throw new Error('Problem here');
        });
  });
}

否则,您可能会遇到错误,因此可以检查err参数以查看是否从那里返回了一些信息。除此之外,只要user.password是原始密码的哈希版本,就应该可以使用。