如何在更换新护照之前检查密码是不是匹配

Posted

技术标签:

【中文标题】如何在更换新护照之前检查密码是不是匹配【英文标题】:how to check if the password matches before changing to new one passport如何在更换新护照之前检查密码是否匹配 【发布时间】:2021-12-27 17:24:07 【问题描述】:

我正在构建一个应用程序,但我正在努力使用护照和 MongoDB 更新密码。 我想检查用户是否输入了他的实际密码,并且在设置新密码之前它是否与数据库中存储的密码相匹配。

这是我目前得到的:

if (req.body.password == req.user.password) 
  if (req.body.newPassword.normalize() == req.body.confirmPassword.normalize()) 
    // Verifying if the new password matches the confirmation one
    // before actually changing the password (This part works)
  
 else 
  // Handling if the old password does not match the DB

res.redirect('/profile')

我一直在尝试这样的事情:

passport.use(new LocalStrategy(
  function(username, password, done) 
    User.findOne(
      username: req.user.email
    , function(err, user) 
      if (err) 
        return done(err);
      
      if (!user) 
        return done(null, false);
      
      if (!user.verifyPassword(req.body.password)) 
        return done(null, false);
      
      return done(null, user);
    );
  

仍然没有工作...有什么提示吗? :)

编辑

我一直在使用加密来尝试获取与存储在 MongoDB 中的哈希相同的哈希。要注册新用户,我使用护照。

let hash = crypto.createHmac('sha256', secret)
               .update('I love cupcakes') // I have no idea of what this this line does, actually...
               .digest('hex');
console.log(hash);

我想在某些时候我应该将数据库存储的盐传递给一个函数,以验证他提交的密码与存储的密码相同,我只是不知道该怎么做......

【问题讨论】:

【参考方案1】:

尝试使用密钥对收到的req.body.password 进行哈希处理,并查看它是否与数据库中保存的已哈希密码匹配。 如果是,则它是相同的旧密码。

【讨论】:

我一直在尝试类似的东西,但是在使用加密时我没有实现从 passportjs 获得相同的哈希值。你知道怎么做吗?我会用我所做的更新我的问题【参考方案2】:

通过大量互联网搜索,我想出了这个:

async function fooChangePW(req,res)
req.user.changePassword(req.body.password, req.body.newPassword)
.then(() => 
    console.log('password changed');
)
.catch((error) => 
    console.log(error);
)
  res.redirect('/profile')

由于用户已经通过身份验证,所以可以使用req.user.changePassword(oldPassword, newPassword)

【讨论】:

以上是关于如何在更换新护照之前检查密码是不是匹配的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot如何在更新前检查数据库中的编码密码是不是与表单中的密码匹配

检查用户名是不是被使用 - PassportJS

如何在创建新文件之前检查文件是不是存在

vivo如何更换oaid

PHP和HTML如何加载新文件

如果“父”文档没有任何匹配的用户名和密码,则护照匹配子文档中的用户名和密码