我有以下URL,可以使用令牌重设密码:
http://localhost:xxxx/reset/a513293ba51df393568cebfab178754eb284bb62
我有以下路由处理程序:
router.post('/reset/:token', function(req, res) {...
由于某种原因,我的请求参数未显示我的路线中的值。
req.params.token
显示:reset
,而不是a513293ba51df393568cebfab178754eb284bb62
我肯定想念一些非常明显的东西,因为我的所有其他页面和路线都工作正常。
在花了更多时间之后,我想我可能会知道为什么我的req对象不起作用。一定是因为异步调用。我该如何使用它?
我的完整路线是:
router.post("/reset/:token", function(req, res) {
async.waterfall([
function(done) {
console.log(req.params.token);
UserModel.findOne({ resetPasswordToken: req.params.token, resetPasswordExpires: { $gt: Date.now() } }, function(err, user) {
if (!user) {
return res.redirect('/login');
}
user.password = req.body.password;
user.resetPasswordToken = undefined;
user.resetPasswordExpires = undefined;
user.save(function(err) {
req.logIn(user, function(err) {
done(err, user);
});
});
});
},
function(user, done) {
var smtpTransport = nodemailer.createTransport({
service: 'SendGrid',
auth: {
user: 'xxx',
pass: 'xxx'
}
});
var mailOptions = {
to: user.email,
from: 'passwordreset@demo.com',
subject: 'Your password has been changed',
text: 'Hello,\n\n' +
'This is a confirmation that the password for your account ' + user.email + ' has just been changed.\n'
};
smtpTransport.sendMail(mailOptions, function(err) {
console.log('Success! Your password has been changed.');
done(err);
});
}
], function(err) {
res.redirect('/');
});
});