除了 bcrypt 之外的一种比较密码的方法

Posted

技术标签:

【中文标题】除了 bcrypt 之外的一种比较密码的方法【英文标题】:A way to compare passwords besides bcrypt 【发布时间】:2021-02-02 17:13:13 【问题描述】:

大家好,我目前正在处理验证表单,但遇到了问题

我的注册路线

`app.post("/signup",function(req,res)`

User.register(username:req.body.username,req.body.password,function(err,registeredUser)

if(err)

req.flash("error", err.message);


  res.locals.message = req.flash();


  return res.render("signup")


else


 passport.authenticate("local")(req,res,function()
  

res.redirect("/secrets")


)


 

)

)

我的登录路径

app.post("/login",function(req,res)


const user = new User(


 username:req.body.username,


password:req.body.password



 )






if(user.username === "")


   req.flash("error","Username is required");


  res.locals.message = req.flash();
    


 else if(user.password === "")
  req.flash("error","The password field is empty");


 res.locals.message = req.flash();
  return res.render("login")

其他

req.login(user,function(err)

`User.findOne(username:req.body.username,function(err,foundUser)

  if(foundUser)
    

passport.authenticate("local",failureRedirect:"/login")(req,res,function()
   

   res.redirect("/secrets")
          
   

 )





   else
      

 req.flash("error","Incorrect email or password");
     

  res.locals.message = req.flash();
       

return res.render("login")


  


  


)


  

)

我可以在登录时检查用户名字段和密码字段是否都为空以及我的数据库中是否不存在用户 但问题是当我的用户存在且密码错误时,我的逻辑无法捕捉到它 有没有办法可以比较散列和加盐密码与用户当前输入的密码以给出适当的错误代码,即给定用户名的密码不正确 谢谢...

【问题讨论】:

【参考方案1】:

如果您使用 bcrypt 进行散列,则无法比较没有 bcrypt 的两个密码

【讨论】:

以上是关于除了 bcrypt 之外的一种比较密码的方法的主要内容,如果未能解决你的问题,请参考以下文章

python的bcrypt加密方式验证

如何将密码文本与 bcrypt 哈希值进行比较?

Mongoose 比较 BCRYPT 密码未填写

bcrypt-nodejs 比较方法每次都返回 false

nodejs - 如何比较bcrypt的两个哈希密码

为啥不需要 salt 来比较 bcrypt 中的密码是不是正确?