Я пытаюсь создать аутентификацию с помощью nodejs с jwt, и я успешно завершил процесс регистрации, чтобы зарегистрировать новых пользователей в базе данных mongo, но у меня проблема с входом, и это код входа:
// Login
router.post('/log', (req, res) => {
User.findOne({ email: req.body.email }, { password: req.body.pass })
.exec()
.then(function(user) {
bcrypt.compare(req.body.pass, user.pass, (err, result) => {
if (err) {
return res.status(401).send('error');
}
if (result) {
const token = jwt.sign({
email: user.email,
_id: user._id
},
'secret',
{
expiresIn: '1h'
});
return res.status(200).json({
success: 'jwt',
token: token
});
}
return res.status(401).send('error happen');
});
})
.catch(err => {
res.status(401).send(err);
});
});
когда я набираю почтальон / журнал и набираю текст, это структурировано:
{
"email": "[email protected]",
"password": "12345",
}
Я получаю это сообщение как ответ от почтальона:
error happen
Не могу понять, в чем ошибка кода, пока регистр работал нормально?





Когда вы вызываете функцию User.findone, она пытается найти пользователя с заданным адресом электронной почты и не хешированным паролем.
Измените эту строку
User.findOne({ email: req.body.email }, { password: req.body.pass })
с этим:
User.findOne({ email: req.body.email })
Таким образом, вы сможете получить пользователя и сравнить хешированные пароли.
Ваша ошибка связана не с JWT, проблема в том, что bcrypt.compare() вернул false, поэтому ваш метод не вводит if и не переходит к возврату с вашим сообщением об ошибке.
Основываясь на вашем коде, я могу предложить следующее:
Вы должны быть уверены, что храните свой хэш-пароль в база данных или процесс, который вы делаете, в порядке, но пароль, который вы ввод неверен.
В вашем методе поиска вы используете обычный текстовый пароль в качестве параметра чтобы найти пользователя, в этом случае пароль не должен быть хранятся небезопасно, поэтому используется хеш пароля, чтобы вы следует удалить этот параметр поиска и найти пользователя для сравнения пароли.
User.findOne({ email: req.body.email })