Почему сравнение bcrypt не работает? Почему isMatch возвращет false, хотя candidatePassword возвращает корректный пароль, и хеш сохраняется в базе тоже корректно.userSchema.methods.comparePassword = function (candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, function (err, isMatch) {
if (err) {
console.log('err')
return cb (err)
}
console.log(candidatePassword)
console.log(isMatch)
cb (null, isMatch)
})
}
Есть подозрение, что он не может из базы взять пароль из за ассинхронности, такое может быть? Потому что я не могу вывести в консоль this.password

21 Авг 2019 в 07:12
165 +1
0
Ответы
1

Да, возможно проблема связана с асинхронностью выполнения кода. Возможно, к моменту выполнения функции bcrypt.compare(), значение this.password еще не было получено из базы данных.

Для того чтобы убедиться в этом, попробуйте вывести в консоль значение this.password перед вызовом функции bcrypt.compare() в вашем методе comparePassword. Если значение this.password не выводится корректно, то это может быть причиной того, почему сравнение не работает.

Для решения этой проблемы, вам нужно убедиться, что значение this.password было успешно получено из базы данных до вызова bcrypt.compare(). Вы можете использовать промисы или колбэки для обработки этой задачи.

Пример использования промисов:

userSchema.methods.comparePassword = function (candidatePassword) {
return new Promise((resolve, reject) => {
// Получаем значение this.password из базы данных
// Затем сравниваем пароли и вызываем resolve(true) или resolve(false) в зависимости от результата
bcrypt.compare(candidatePassword, this.password, function (err, isMatch) {
if (err) {
reject(err);
} else {
resolve(isMatch);
}
});
});
};
// Использование метода comparePassword
user.comparePassword(candidatePassword)
.then((isMatch) => {
console.log(isMatch);
})
.catch((err) => {
console.error(err);
});

Таким образом, вы можете убедиться, что значение this.password успешно получено из базы данных перед сравнением паролей.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир