2016-04-11 12 views
1

私はパスワードを忘れたアプリケーションにnodemailerを使用していますが、電子メールは忘れたパスワードで実行されますが、ユーザーがパスワードをリセットしても確認メールは表示されません。それがなぜ起こっていないのか分かりません。タイプエラー:完了は機能ではありません(ノーデマイラー)

はdone(err)行にエラーが発生しているようです。下のあなたは間違って最初水壁タスクでdone機能を呼び出しているトークンリセット

//get handler for reset token 
app.post('/reset/:token', function(req, res, next) { 
    async.waterfall([ 
     function(done) { 
      User.findOne({ resetPasswordToken: req.params.token, resetPasswordExpires: { $gt: Date.now() } }, function(err, user) { 
       if (!user) { 
        req.flash('error', 'Password reset token is invalid or has expired.'); 
        return res.redirect('back'); 
       } 

       user.password = req.body.password; 
       user.resetPasswordToken = undefined; 
       user.resetPasswordExpires = undefined; 

       user.save(function(err) { 
        req.logIn(user, function(err) { 
         done(err, user); 
        }); 
       }); 
      }); 
     }, 
     function (token, user, done) { 
      var options = { 
       service: 'Mailgun', 
       auth: { 
        user: '[email protected]', 
        pass: 'xxxxxxxxxxxxxx' 
       } 
      }; 
      var transporter = nodemailer.createTransport(smtpTransport(options)) 

      var mailOptions = { 
       to: user.email, 
       from: '[email protected]e909aedb7b6e87b45.mailgun.org', 
       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' 
      }; 
      transporter.sendMail(mailOptions, function(err) { 
       req.flash('success', 'Success! Your password has been changed.'); 
       done(err); 
      }); 
     } 
    ], function(err) { 
     res.redirect('/'); 
    }); 
}); 

答えて

1

ためのGETハンドラがあります。 2番目のタスクは、2つのパラメータ、つまりtoken, userと追加のコールバックが必要です。しかし、あなたはただ一つのパラメータ、userを渡します。

... 
user.save(function(err) { 
    req.logIn(user, function(err) { 
     done(err, token, user); // TODO: initialize token 
    }); 
}); 
.... 

tokenパラメータ機能doneに追加

関連する問題