我正在尝试向我的应用添加重置密码功能。我创建了一个基本表单,用户填写了他们的电子邮件,然后应该生成一封电子邮件给该用户的地址。这似乎有效,但是在我到达重定向功能之前,我的代码似乎已经冻结,因此生成了电子邮件,但用户永远不会被重定向 - 而是页面只是挂起。这是我的代码,在用户提交忘记密码表单后运行:
router.post('/forgot', function(req, res, next) {
async.waterfall([
function(done) {
crypto.randomBytes(20, function(err, buf) {
var token = buf.toString('hex');
done(err, token);
});
},
function(token, done) {
User.findOne({ email: req.body.email }, function(err, user) {
if(!user) {
req.flash('error', 'No acccount with that email address exists.');
return res.redirect('/forgot');
}
user.resetPasswordToken = token;
user.resetPasswordExpires = Date.now() + 3600000; // 1 hour
user.save(function(err) {
done(err, token, user);
});
});
},
function(token, user, done) {
var smtpTransport = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: "*****@gmail.com", // my actual email address here
pass: "********" // my actual password here
}
});
var mailOptions = {
to: user.email,
from: 'dvbage@gmail.com',
text: 'Please click on the following linke to reset password:'
};
smtpTransport.sendMail(mailOptions, function(err) {
req.flash('info', 'An e-mail has been sent to ' + user.email + ' with instructions as to how to change your password')
});
}
], function(err) {
if(err) return next(err);
res.redirect('/forgot');
});
});
我试过抛出一些调试器,但似乎没有用。有人有什么想法吗?