У меня есть следующий 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('/');
});
});