#node.js #backend #bcrypt #mern
Вопрос:
Итак, я получаю эту ошибку Error: Illegal arguments: string, undefined
, и это код
router.post('/loguser', async (req, res) => {
const compareHashed = await bcrypt.compare(req.body.password)
const user = await User.findOne({
username: req.body.username,
password: compareHashed
})
if (user) {
console.log('user is found')
}
if (!user) {
console.log('user is not found')
}
})
кто-нибудь знает, как это исправить, я знаю, что это проблема с bcrypt
Комментарии:
1. Сначала вы должны получить пользователя по имени пользователя. Затем вам следует сравнить свой пароль с паролем пользователя. bcyrpt.сравнение(запрос.тело.пароль, пользователь.пароль, функция(ошибка, данные) => { // ваш обратный вызов })
2. Можете ли вы рассказать нам, что вы пытались здесь сделать, чтобы это помогло вам написать лучший ответ?
3. Вам нужно передать 2 вещи в bcrypt.сравните-как еще вы скажете, какие 2 вещи вы сравниваете?
4. @douscriptist вам не нужно указывать функцию обратного вызова-в этом случае вы получите обещание
await
, как это делает @evan_tech1234.
Ответ №1:
Привет, братан, сначала мы хешировали пароль и хранили его в бд правильно
извлеките этот хэшированный пароль из базы данных и сравните его с фактическим паролем
например: если мы пытаемся войти в систему с помощью электронной почты и пароля
User.find({email:req.body.email}).exec().then(result=>{
if(result.length < 1){
console.log('email not found')
}else{
bcrypt.compare(req.body.password,result[0].password,(err,result)=>{
if(err){
console.log('password not match')
}
if(result){
console.log('password match')
}
})
}
})