#node.js #mongodb #jwt #bcrypt
Вопрос:
я сталкиваюсь с этими довольно глупыми проблемами, когда пытаюсь реализовать JWT в NodeJS, Мангуст как мой механизм аутентификации.
допустим, я попытался реализовать функцию входа в систему с помощью этого кода (NodeJS)
const post_login = async (req, res, next) => {
const userData = req.body;
try {
const user = await User.login(userData);
res.status(200).json({user: user._id});
} catch (error) {
res.status(400).json({});
}
// res.json(userData)
};
затем я включаю эту функцию в данные моей модели
UserSchema.statics.login = async function(userData){
const {email, password} = userData;
const user = await this.findOne({email});
if (user) {
const auth = await bcrypt.compare(password, user.password)
if (auth) {
return user;
}
throw Error('Password do not match');
}
throw Error('Email is not registered');
};
я успешно реализовал bcrypt.hash при хранении моих данных в MongoDB. но, когда я пробую этот код, он всегда выдает ошибку (статус 4000). после того, как я проведу некоторую отладку, проблема в том, что
- Во время отладки я
await bcrypt.compare(password, user.password)
обнаружил , что это похоже на сравнение нешифрованного «пароля» с сохраненным (хэшированным) паролем «user.password». - если я пропустил
bcrypt.compare
, он возвращает соответствующие данные документа (даже если указанный пароль не совпадает). - Отображается сообщение об ошибке
(node:11784) UnhandledPromiseRejectionWarning: Error: data and hash arguments required
at Object.compare (E:practicejwtnode_modulesbcryptbcrypt.js:208:17)
at E:practicejwtnode_modulesbcryptpromises.js:29:12
at new Promise (<anonymous>)
at Object.module.exports.promise (E:practicejwtnode_modulesbcryptpromises.js:20:12)
at Object.compare (E:practicejwtnode_modulesbcryptbcrypt.js:204:25)
at E:practicejwtmodelsuser-model.js:67:20
(Use `node --trace-warnings ...` to show where the warning was created)
(node:11784) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This
error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:11784) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the
Node.js process with a non-zero exit code.
- Я бегу по nodeV14
имейте в виду, что кто-нибудь знает, как это исправить, заранее спасибо