使用nodejs中的crypto npm再次散列重置密码的密码时登录失败

时间:2018-03-09 13:06:06

标签: javascript node.js mongodb cryptography

我正在为reset the password制作api。当我首次使用password使用crypto.pbkdf2Sync注册用户时,我首先生成salt,然后使用该盐对password进行哈希处理,并在数据库中保存该盐和哈希密码。

reset password

的API
export function newPassword(req,res) {
  if (req.body.newpassword.length < 1)
    return res.status(400).json({message: "Please Enter a new password"});
  jwt.verify(req.token, TOKEN_SECRET, function (err, data) {
    if (err) {
      res.status(400).json(err);
    }
    else {
      User.findOne({_id : data._id}).exec()
        .then(user =>{
          console.log(user);
          var key = crypto.pbkdf2Sync(req.body.newpassword,user.salt,10000,64,'sha1').toString('base64');
          console.log(key);

          User.update({_id: data._id}, {$set: {password: key}})
            .then(data => {
              res.json(data)
            })
            .catch(err => {
              res.status(400).json(err);
            });
          }
        )
        .catch(err =>{
          res.status(400).json(err);
        });
    }
  });
}

此处登录成功。

当我获取保存的salt并使用该盐在重置password期间再次对password进行哈希处理。

crypto.pbkdf2Sync(newpassword,user.salt,defaultIterations,defaultKeyLength,'sha1') 

显示邮件登录失败。 //这不是错误。如果auth失败,这是我设置的消息。

注意 - 我没有在数据库中再次更新salt

我想知道为什么它在显示成功之前第一次显示登录失败

0 个答案:

没有答案