Это странно.
Что я пытаюсь сделать
Создайте сервер аутентификации в node.js, используя локальную стратегию Passportjs и JWT. Возможность регистрации аккаунта по электронной почте и паролю, с паролями, хэшированными с помощью «crypto»
Что происходит
Поэтому, когда я вхожу с правильным паролем в ранее существовавшую модель, в APi происходит сбой аутентификации из-за неправильного пароля. Хотя там происходят некоторые странные вещи.
Что я пробовал
По сути, когда я делаю запрос на почту:
- ОПЦИИ / api / входящие звонки
- Он проходит через мою конфигурацию паспорта и в типичной функции, где вы проверяете правильность пароля
- примечание: api / логин POST регистрируется на консоли
Функция в моей конфигурации паспорта:
if (!profileController.passMatch(username, password)) {
console.log('pass was wrong');
return done(null, false, {
message: 'Password is wrong'
});
}
- Вызовы «pass is not» вызваны ошибкой с помощью done (). Хотя в passMatch, как вы увидите ниже, он показывает правильный пароль
Функция passMatch в контроллере профиля:
module.exports.passMatch = (email, password) => {
User.findOne({email: email}, (err, user) => {
if (err) { console.log ("error at passMatch: " + err); }
var hash = crypto.pbkdf2Sync(password, user.salt, 1000, 64, 'sha512').toString('hex');
console.log(user.hash == hash);
return (user.hash == hash);
});
return false;
};
- Хотя, если вы заметили консольный журнал, где я проверяю правильность сравнения хешей. Этот лог-оператор выводится на консоль после того, как 'pass was not' зарегистрировано . Он также печатается после того, как вызов passport.authenticate в моей функции входа завершает неудачную аутентификацию в console.log (info)
Функция входа в систему:
module.exports.login = (req, res) => {
console.log('beginning to authenticate');
passport.authenticate('local', (err, user, info) => {
console.log ("authenticating");
var token;
// If passport throws an error
if (err) {
res.status(404).json(err);
console.log("error logging in");
return;
}
// If a user is found
if (user) {
// Respond with JWT
token = createJwt(user)
res.status(200);
res.json({
"token": token
})
console.log("user logged in");
// If a user wasn't found
} else {
res.status(401).json(info);
console.log(info);
}
})(req, res);
};
- Ошибка входа в систему не вызывается, но console.log (info) вызывается с сообщением об ошибке из сообщения done () в конфигурации.
Что здесь не так?