ExpressJS маршрутизирует различное поведение между Windows и Unix - PullRequest
0 голосов
/ 24 сентября 2018

на сайте nodejs, в основном добавляющем аутентификацию промежуточного программного обеспечения + авторизацию поверх статического веб-сайта, созданного gitbook, сценарий маршрутизации ведет себя по-разному в среде windows (либо windows 10, либо сервер windows) и unix docker (Служба приложений Azure в Linux).

промежуточное ПО со статическим веб-сайтом объясняет допустимость шаблонов маршрутизации

// authentication route + keeping incoming url for further redirection
router.get('/:book?/login/:originalUrl?', function (req, res) {
  passport.authenticate('azuread-openidconnect', { customState: req.params.originalUrl, failureRedirect: '/' }, callbackwhatever);
});

// all-in route + authentication check
router.get('/:book?/*', (req, res) => {
  var book = req.params.book;

  if (!req.isAuthenticated()) {
    res.redirect('/' + (book || 'default') + '/login/' + encodeURIComponent(req.originalUrl));
  } 
  else
  [sending content]
});
  • в Windows: если не аутентифицирована в маршруте '/: book? /* 'тогда он правильно перенаправляется на' /: book? / login /: originalUrl? '
  • в unix (для того же URL): если не аутентифицирован, перенаправление снова переходит к' /: book? / * 'и цикл

во время перехода от win к unix, у меня была другая похожая ситуация из-за URI (даже если в маршрутизации был закодирован encodeURIComponent, к которому я обратился, передав данные в body + POST-запрос.Что я могу сделать в сценариях перенаправления / авторизации.

после основного теста, я почти уверен, что проблема возникла из encodeURIComponent(req.originalUrl), но я не нахожу никаких ссылок на то, как решить ее в exсценарий переадресации.

версия

  • экспресс 4.15.5

  • выигрышный узел 7.1.0

  • узел unix 8.0.0

...