Как определить конкретный successRedirect в узле JS с помощью Express?

У меня есть вопрос об успешном перенаправлении в passport.authenticate. Я использую passport.js и локальную стратегию в nodejs и выражаю для входа пользователя и пытаюсь сделать конкретный маршрут successRedirect.

Например, если я вхожу в систему с идентификатором пользователя: gpaul(предполагается, что вход выполнен успешно), то для маршрута successRedirect должно быть указано "? Channel=gpaul".

Я сделал код, как показано ниже

var data_1 = {email:''};
app.post('/login',
  function (req,res,next){
    req.flash("email");
    data_1.email = req.body.email;
    console.log(data_1.email);
    next();
  }, passport.authenticate('local-login', {
    successRedirect : ('/status.html?channel='+ data_1.email),
    failureRedirect : '/login',
    failureFlash : true
  })
);

После реализации приведенного выше кода адрес выходит пустым, localhost:4000/? Channel = Как я могу поместить этот data_1.email в successRedirect?

У кого-нибудь есть идеи для этого...? Пожалуйста, помогите мне здесь..

Благодарю.

1 ответ

Решение

Попробуйте использовать пользовательский обратный вызов:

app.post('/login', function(req, res, next) {
passport.authenticate('local-login', function(err, user, info) {
  if (err) { return next(err); }
  if (!user) { return res.redirect('/login'); }
  return res.redirect('/status.html?channel='+ req.body.email);
  })(req, res, next);
});

В этой реализации обратный вызов имеет доступ к req а также res объекты через закрытие. Следовательно, email не будет пустым (в отличие от вашей реализации)

Другие вопросы по тегам