bcrypt compareSync returns false 即使它们有相同的字符串

bcrypt compareSync returns false even they have same string

我正在尝试实现登录功能 当我像这样创建登录功能时

login: (req,res) => {
const body = req.body;
getUserByEmail(body.email,(err,results)=>{
  if(err){
    console.log(err); 
  }
  if(!results){
    return res.json({
      sucess: 0,
      data: "Invalid email or password 1"
    });
  }
  console.log(body.pw);
  console.log(results.pw);
  const result = compareSync(body.pw,results.pw);
  console.log(result)
  if(result){
    results.pw = undefined;
    const jsontoken = sign({result: results},"1234413",{
      expiresIn: "1h"
    });
    return res.json({
      sucess: 1,
      message: "login sucessfully",
      token: jsontoken
    });
  }else{
    return res.json({
      sucess: 0,
      data: "Invalid email or password2"
    });
  }
});
}

Terminal Answer

我控制台记录 body.pw 和 results.pw 但似乎它给了我相同的字符串但是 我不确定为什么即使 body.pw 和 results.pw

的字符串相同,它也会给我错误的结果

compareSync 将密码与哈希值进行比较。在将密码与 plain-text 密码进行比较之前,您首先需要对密码进行哈希处理。

第一个运行

bcrypt.hash(myPlaintextPassword, saltRounds).then(function(hash) {
    // Store hash in your password DB.
});

那你可以比较一下

bcrypt.compare(myPlaintextPassword, hash).then(function(result) {
    // result == true
});