bcrypt сравнить с nodejs

#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')
      }
    })
  }
})