以下代码取自于我使用本地护照策略创建的先前应用程序,该应用程序允许用户创建帐户并重置(更新)密码。
我正在开发一个使用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.' });
});
});