Паспортная стратегия зависает и не сбрасывает пароль - PullRequest
0 голосов
/ 31 августа 2018

У меня есть маршрут, который вызывает только одну функцию, которая должна отправлять пользователю электронное письмо со ссылкой, и эта ссылка должна содержать токен. Письмо со ссылкой и токеном отправляется пользователю. Токен сохраняется в профиле пользователя и должен быть сохранен в коллекции tokens, но там не сохраняется.

Вторая часть заключается в том, что маршрут зависает до тех пор, пока не произойдет ошибка 502 в облаке 9.

Нет ни одной трассировки стека или сообщения об ошибке, кроме как по истечении времени ожидания, я получаю пустой оператор morgan (пакет из npm) с пропущенным временем.

Есть идеи, что происходит не так?

Маршрут

// POST FORGOT
app.post('/user/forgot', 
users.postForgotPassword);

Функция postForgotPassword пользователя

exports.postForgotPassword = (req, res, next) => {
  req.assert('email', 'Please enter a valid email address.').isEmail();

  var errors = req.validationErrors();

  if (errors) {
    req.flash('form', {
      email: req.body.email
    });
    req.flash('errors', errors);
    console.log(errors);
    return res.redirect('/');
  }

  async.waterfall([
    function(done) {
      crypto.randomBytes(16, function(err, buf) {
        var token = buf.toString('hex');
        done(err, token);
      });
    },
    function(token, done) {
      User.findOne({ email: req.body.email.toLowerCase() }, function(err, user) {
      if(err){
        console.log(err);
      }
        if (!user) {
          req.flash('form', {
            email: req.body.email
          });
          req.flash('error', 'No account 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 newUserEmail = req.body.email;
      var message= 'You are receiving this email because you (or someone else) have requested the reset of the password for your account.\n\n' +
          'Please click on the following link, or paste this into your browser to complete the process:\n\n' +
          'http://' + req.headers.host + '/reset/' + token + '\n\n' +
          'If you did not request this, please ignore this email and your password will remain unchanged.\n';
      sendEmail('noreply@domain.com', newUserEmail, 'Reset your password on <site name>', message);
    }
  ], function(err) {
    if (err) return next(err);
    res.redirect('/login');
  });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...