BCrypt哈希错误

时间:2017-03-03 21:39:55

标签: node.js mongodb bcrypt

这是我的哈希密码代码,用于将现有密码与现有模块的密码进行比较,密码已在正文请求中发出:

        //hash password of document that use this schema
    bcrypt.hash(user.password, null, null, function (err, hashed) {

        if (err) {
            throw err;
        } else {
            user.password = hashed;

            //next api
            next();
        }
    })
});

userSchema.methods.comparePassword = function (password) {

    //refer at userSchema
    var user = this;

    //return method of bcryot library that compare two string: original password and password hashed
    return bcrypt.compareSync(password, user.password);

};

但请比较此错误消息:

Uncaught, unspecified "error" event. (Not a valid BCrypt hash.)

2 个答案:

答案 0 :(得分:2)

解决了!!!进入数据库我有很多用户的密码没有哈希,当我尝试登录时,bcrypt.compareSync (password, user.password);预计会有哈希密码。

答案 1 :(得分:1)

您正在使用null两次。我打赌你已经在bcrypt.genSalt函数中包含了这个函数(如果你没有,那么这样做)。您需要将写入第一个null的bcrypt盐传递给它。

以下是一个完整的例子:

userSchema.pre('save', function (next) {
  const SALTROUNDS = 10;  // or another integer in that ballpark
  const user = this;
  if(!user.isModified('password')) {
    return next();
  }

  bcrypt.genSalt(SALTROUNDS, (err, salt) => {
    if (err) { return next(err); }

    bcrypt.hash(user.password, salt, null, (error, hash) => {
      if (error) { return next(error); }

      user.password = hash;
      next();
    });
  });
});