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