使用jsonwebtoken身份验证时如何更新密码

时间:2019-08-28 21:21:02

标签: node.js jwt express-jwt

以下代码取自于我使用本地护照策略创建的先前应用程序,该应用程序允许用户创建帐户并重置(更新)密码。

我正在开发一个使用jsonwebtoken创建用户帐户的新应用。当用户提交发布请求以更新其密码时,我需要一些有关更新流程的帮助。

下面是需要更新的代码段。在使用本地护照中的内置方法setPassword之前。但是现在我正在使用jsonwebtoken,所以我不确定如何更新以下内容以使其正常工作。

         if(req.body.password == req.body.confirm) {
            user.setPassword(req.body.password, function(err) {
              user.resetPasswordToken = undefined;
              user.resetPasswordExpires = undefined;

              user.save(function(err) {
                req.logIn(user, function(err) {
                  done(user, err);
                });
              });
            })

下面是完整路线。

    app.post('/reset/:token', function(req, res) {
    async.waterfall([
      (done) => {
        User.findOne({ resetPasswordToken: req.params.token, 
         resetPasswordExpires: { $gt: Date.now() } }, function(err, user) 
          {
          if (!user) {
            return res.send({'error': 'Password reset token is invalid or 
            has expired.'});
          }
          if(req.body.password == req.body.confirm) {
            user.setPassword(req.body.password, function(err) {
              user.resetPasswordToken = undefined;
              user.resetPasswordExpires = undefined;

              user.save(function(err) {
                req.logIn(user, function(err) {
                  done(user, err);
                });
              });
            })
          } else {
              return res.send({'error': "Passwords do not match."});
          }
        });
      },
      (user, done) => {
        var smtpTransport = nodemailer.createTransport({
          service: keys.auth.service, 
          auth: {
            user: keys.auth.email,
            pass: keys.user.pass
          }
        });
        var mailOptions = {
          to: user.username,
          from: 'QA Automation',
          subject: 'Your password has been changed',
          text: 'Hello,\n\n' +
            'This is a confirmation that the password for your account ' + 
          user.username + ' has just been changed.\n'
        };
        smtpTransport.sendMail(mailOptions, (err) => {
          res.send({ 'error': err.toString() });
          done(err);
        });
      }
    ], (err) => {
      res.send({ 'success': 'Success! Your password has been changed.' });  
    });
  });

0 个答案:

没有答案