Я настраиваю логин, используя node.js, bcrypt, sequelize и паспорт, и я следил за документацией в Интернете, но по какой-то причине функция .compare всегда возвращает false, даже когда я знайте совпадение паролей.bcrypt-nodejs.compare всегда возвращает false
В моей модели я добавил крючок beforCreate для шифрования пароля:
beforeUpdate: function(user, options, fn) {
encryptPassword(user, options, fn);
}
функция encryptPassword:
encryptPassword = function(user, options, fn) {
if (!user.changed('password'))
return fn();
bcrypt.hash(this.password, null, null, function(err, hash) {
if (err) return fn(err);
user.password = hash;
fn();
});
}
Мой контроллер, где я создаю пользователя:
User
.create({
username: req.body.username,
password: req.body.password
})
.then(function() {
res.json({
message: 'New beer drinker added to the locker room!'
});
});
Это отлично работает, пользователь хранится в моей БД с хешированным паролем.
Теперь я пытаюсь войти пользователю при помощи паспорта
passport.use(new BasicStrategy(
function(username, password, callback) {
User
.find({
where: {
username: username
}
})
.then(function(user) {
// No user found with that username
if(!user) return callback(null, false);
// Make sure the password is correct
user.verifyPassword(password, function(err, isMatch) {
if(err) return callback(err);
// Password did not match
if(!isMatch) return callback(null, false);
// Success
return callback(null, user);
});
})
.catch(function(err) {
return callback(err);
});
}
));
Этот процесс вызывает user.verifyPassword который является instanceMethod моей модели пользователя.
verifyPassword: function(password, callback) {
bcrypt.compare(password, this.password, callback);
}
Однако обратный вызов всегда неверен независимо от того, совпадают ли пароли или нет. У кого-нибудь есть идеи, что я делаю неправильно? Я попытался переключиться на bcrypt, но я не смог его установить, потому что node-gyp rebuild всегда терпит неудачу, жалуясь, что не может найти переменную env для python, которую я установил. Плюс я не хочу иметь огромную боль в заднице, пытаясь заставить разработчиков сервера настроить сервер со всеми зависимостями и обычным обычным bcrypt.
Ты спасатель жизни. Я тоже сделал что-то вроде этого, и подумал, что виновником является Бкрипт. Благодаря! Также вы должны отметить это как ответ, чтобы закрыть вопрос. – Rafael