使用Passport和Node添加密码重置功能 - 电子邮件发送但应用冻结

时间:2017-05-02 15:44:37

标签: node.js passport.js

我正在尝试向我的应用添加重置密码功能。我创建了一个基本表单,用户填写了他们的电子邮件,然后应该生成一封电子邮件给该用户的地址。这似乎有效,但是在我到达重定向功能之前,我的代码似乎已经冻结,因此生成了电子邮件,但用户永远不会被重定向 - 而是页面只是挂起。这是我的代码,在用户提交忘记密码表单后运行:

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');
    });
});

我试过抛出一些调试器,但似乎没有用。有人有什么想法吗?

0 个答案:

没有答案