bcryptjs comparePassword всегда возвращает false - NodeJS - PullRequest
0 голосов
/ 04 мая 2018

Я посмотрел другие ответы на вопрос здесь, но до сих пор никуда не деться. Я не могу заставить функцию comparePassword вернуть true

module.exports.createUser = function(newUser, callback) {
  bcrypt.genSalt(10, function(err, salt){
    bcrypt.hash(newUser.password, salt, function(err, hash){
      newUser.password = salt;
      newUser.save(callback);
    });
  });
};

module.exports.comparePassword = function(candidatePassword, hash, callback){
  console.log("Provided password is " + candidatePassword);
  console.log("Provided hash is " + hash);
  bcrypt.compare(candidatePassword, hash, function(err, isMatch) {
    if(err) throw err;
      console.log(isMatch);
      callback(null, isMatch);
    });
}

Так что, если мы возьмем пользователя на тестирование на этом этапе, вы сможете увидеть его данные

{ _id: 5aec6f702a4a181f261a43fe,
  full_name: 'Its me',
  username: 'myusername',
  email: 'myemail@gmail.com',
  tel_number: '12345678',
  password: '$2a$10$6GCgZDt.FL/eeZ1NsDASe.', // text version = test
  __v: 0
}

При запуске comparePassword журналы консоли возвращают

Provided password is test
Provided hash is $2a$10$6GCgZDt.FL/eeZ1NsDASe.

Так мне они соответствуют, верно?

Не уверен, что здесь происходит.

1 Ответ

0 голосов
/ 06 мая 2018

Не могли бы вы попробовать заменить строку newUser.password = salt; на newUser.password = hash;?

И дайте нам знать, если это работает.

У меня есть пример в моем репозитории github, это может помочь

https://github.com/shirshendubhowmick/jwt-demo

Вот фрагмент кода из репо

    bcrypt.genSalt(10, (error, salt) => {
        bcrypt.hash(user.password, salt, (error, hash) => {
            user.password = hash;
            next();
        });
    });
...