Проблема с перенаправлением внутри passport.authenticate () - PullRequest
0 голосов
/ 28 января 2020

У меня проблема с паспортной js аутентификацией. Я получаю сообщение об ошибке при попытке получить доступ к свойству undefined при вызове res.redirect('/') внутри моего passport.authenticate() обратного вызова. Моя стратегия аутентификации выглядит следующим образом:

passport.use(new LocalStrategy({
  session: false
}, (username, password, done) => {
  console.log('strategy invoked');
  let user = new User('jason', 'password');
  return done(null, user);
}));

и мой обработчик маршрута:

app.post('/auth', 
passport.authenticate('local', { failureRedirect: '/fail'},
function(req, res){
    console.log('authenticate callback');
    console.log(req.body);   //logs undefined
    res.redirect('/');       //throws error here
  }
));

, поэтому, когда я использую curl для создания POST-маршрута / auth, я получаю сообщение об ошибке, которое говорит: : Cannot read property 'redirect' of undefined. Я пробовал несколько вариантов обработчика маршрута, в том числе тот, в котором я просто устанавливал successRedirect на «/», но мой обработчик маршрута на «/» никогда не срабатывал. Я также попробовал это:

app.post('/auth', (req, res) => {
passport.authenticate('local', (req, res) => {
    console.log('authenticate callback');
    console.log(req.body);
    res.redirect('/');
  })(req, res);
});

Итак, мой вопрос:

  1. Как я могу получить доступ к объектам req и res внутри обратного вызова аутентификации, чтобы прочитайте тело запроса и отправьте ответ, для example res.redirect('/');?

  2. Если настройка successRedirect: '/' является лучшим вариантом, как я могу убедиться, что мои перенаправления действительно выполняются?

1 Ответ

1 голос
/ 28 января 2020

В вашем коде есть ошибка. Вы объединяете промежуточное ПО для паспорта и функцию обратного вызова в один и тот же аргумент. Попробуйте приведенный ниже код или посмотрите пример в документации: http://www.passportjs.org/docs/downloads/html/

app.post('/auth', passport.authenticate('local', { failureRedirect: '/fail'}), function(req, res){
    console.log('authenticate callback');
    console.log(req.body);   //logs undefined
    res.redirect('/');       //throws error here
});
...