Аутентификация паспорта сразу после регистрации нового пользователя

Я пытаюсь выполнить аутентификацию и логин пользователя сразу после отправки POST в форме /register. В идеале я бы хотел, чтобы пользователи могли зарегистрироваться, а затем перенаправляться сразу на панель инструментов, не вводя их учетные данные снова.

Мой сервер использует Passport 0.1.17 с локальной стратегией, настроенной на использование адреса электронной почты и пароля для входа в систему. Текущий код:

app.post('/register', function(req, res) {

  // attach POST to new User variable
  var registerUser = new User({ email: req.body.email, password: req.body.password, name: req.body.name });

  // save registerUser Mongo
  registerUser.save(function(err) {
    if(err) {
      console.log(err);
    } else {
      console.log('registerUser: ' + registerUser.email + " saved.");
    }
  });

  // here is where I am trying to authenticate and then redirect
  passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }),
  res.redirect('/dashboard');
  });

Как бы я реорганизовал этот код, чтобы сохранить нового пользователя, затем аутентифицировать и, наконец, перенаправить на панель управления?

Спасибо заранее!

Ответ 1

Вот решение, которое я придумал после прочтения req.login:

app.post('/register', function(req, res) {
  // attach POST to user schema
  var user = new User({ email: req.body.email, password: req.body.password, name: req.body.name });
  // save in Mongo
  user.save(function(err) {
    if(err) {
      console.log(err);
    } else {
      console.log('user: ' + user.email + " saved.");
      req.login(user, function(err) {
        if (err) {
          console.log(err);
        }
        return res.redirect('/dashboard');
      });
    }
  });
});

Я хотел бы немного почистить его и подумать, что раздел err может быть более надежным, но это действующее решение. Обратите внимание, что кто-то другой реализует это, им следует знать, что он предназначен для использования локальной стратегии паспорта с электронной почтой вместо имени пользователя.