Цикл перенаправления в промежуточном ПО Express - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть экспресс-промежуточное ПО с маршрутами, определенными таким образом, что, если запрос не аутентифицирован, перенаправляется на страницу входа, которая подается из статических файлов:

  app.use('/login', authMiddleware.login);
  app.get(['/static', '/static*'], authMiddleware.login);
  app.use('/logout', authMiddleware.logout);
  app.use('/check-login', authMiddleware.checkLogin);
  // For any request that is not authenticated 'authenticat' 
  // would redirect  to /login
  app.use('*', authMiddleware.authenticate);

в функции входа, которую я проверяюURL-адрес запроса и предоставить HTML-файл. Если в начале пути указан URL-адрес static, я хочу вернуть запрошенный файл. Поэтому, когда пользователь не авторизован, я отправляю его в '/ login', где представлен index.html и в нем есть ссылки на css и Js в статическом каталоге:

module.exports.login = (req, resp, next) => {

  const name = req.originalUrl.split('/');
   // If the request is for /static/file.js or static/file.css then:
  if (name[1] === 'static') {
       // Send the file 
    console.dir(path.join(`${__dirname}${req.originalUrl}`));
    resp.sendFile(path.join(`${__dirname}${req.originalUrl}`));
  }
  if (name[1] === 'login') {     
    console.dir(path.join(`${__dirname}${req.originalUrl}`));
    resp.sendFile(path.join(`${__dirname}/static/index.html`));
  }
  next();
};

А вот мой authenticate function:

module.exports.authenticate = (req, res, next) => {
  if  (!req.session.accessToken) {
    res.redirect('/login');
  } else {
    return next();
  }
};

Это работает для файла index.html, но не для CSS / JS, обслуживаемого из статического каталога. Запросы на статические css / js заканчиваются циклом перенаправления. Я подозреваю, что есть проблема с моей логикой функции входа в систему и тем, как я проверяю /static в запросе или приоритет в маршрутах.

1 Ответ

0 голосов
/ 06 ноября 2019

Похоже, проблема заключалась в функции next() при входе в систему. Удаление его позволило приложению работать должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...