Node.js下的bcrypt比较

3

我遇到了这个错误:错误:非法参数:字符串、未定义 以下是代码:

    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的一个问题。


你应该首先通过用户名获取用户。 然后,你应该将你的密码与用户密码进行比较。 bcrypt.compare(req.body.password, user.password, function(err, data) => { // 你的回调函数 }) - dogukyilmaz
你能告诉我们你在这里尝试做什么,以便更好地为你撰写答案吗? - Code Fingers
你需要传递两个参数给 bcrypt.compare -- 否则你怎么知道你在比较什么? - Joe
@douscriptist,您不必指定回调函数--在这种情况下,您会得到一个 Promise,就像 @evan_tech1234 所做的那样,您可以使用 await - Joe
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接