на сайте 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