У меня есть этот простой код, часть POST которого в значительной степени соответствует паспортной документации:

  authRouter.route('/signIn').get((req, res) => {
    res.render('signIn', {
      nav,
      props,
      title: 'Sign In'
    });
  })
  .post(passport.authenticate('local'), function(req, res) {
    debug(`${chalk.redBright('authenticated')}`);
    // If this function gets called, authentication was successful.
    // `req.user` contains the authenticated user.
    res.redirect('/auth/profile');
    
  });

Но независимо от ответа HTTP (200, 304 и т. д.) никогда не перенаправляется. Я также пытался использовать методы successRedirect и failureRedirect с тем же результатом.

Вот мой маршрут для авторизации/профиля:

  authRouter.route('/profile')
    .all((req, res, next) => {
      if (req.user) {
        next();
        debug(req.user)
      } else {
        res.redirect('/');
      }
    })
    .get((req, res) => {
      res.json(req.user);
    });

  return authRouter;
}

В этом случае res.redirect работает отлично.

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

0
Adam Burns 25 Апр 2020 в 02:51
200 и 304 не являются статусами, указывающими на редиректы.
 – 
CherryDT
25 Апр 2020 в 02:53
Один дополнительный балл. Когда я смотрю на вкладку сети, я действительно вижу ожидаемый ответ. Поэтому я думаю, что это должно быть что-то о том, как экспресс работает в окнах с браузерами или что-то в этом роде. Приветствуются любые знания!
 – 
Adam Burns
25 Апр 2020 в 03:00
Как вы вызываете конечную точку POST? Это обычная форма или вы используете вызов Ajax?
 – 
leonardfactory
25 Апр 2020 в 03:03
Просто интуиция, может быть, вы отправляете запрос AJAX? Перенаправления в ответе на запрос AJAX просто перенаправляют этот запрос и вместо этого возвращают содержимое цели перенаправления в качестве ответа. Но они не перемещаются по вашему браузеру. Вам нужно будет отреагировать на ответ на вызов и вместо этого вручную перемещаться.
 – 
CherryDT
25 Апр 2020 в 03:03
@leonardfactory, нет... это обычная отправка формы.
 – 
Adam Burns
25 Апр 2020 в 03:27

1 ответ

Хорошо, спасибо за ответы. Я понял это, и я чувствую себя действительно глупо. Я использовал шаблон Bootstrap, который прикреплял скрипт как часть класса CSS. Я даже не знал, что ты так умеешь. Таким образом, несмотря на то, что я делал прямую публикацию, похоже, что скрипт выполнял вызов XHR, вероятно, поэтому это выглядело так, и два человека предложили это. Я очень ценю ответы. Было довольно трудно увидеть, что происходит. Похоже, что Firefox по-прежнему лучше подходит для отладки в некоторых отношениях.

0
Adam Burns 25 Апр 2020 в 06:43