Имеется маршрут: /authorize (POST, GET), также имеется middleware для проверки на авторизацию пользователя. В случае если пользователь не авторизован, то я возвращаю ошибку через цепочку:
next({ status: 401, message: "Unauthorized" });
Данную ошибку я обрабатываю через middleware:
app.use((err, res, req, next) => {
if (err.status === 401)
return res.json({});
}
next();
});
Для маршрута /authorize у меня само собой имеется контроллер. Проблема такая, что мне нужно обрабатывать ошибку middleware на проверку авторизации пользователя в контроллерах данного маршрута, дабы если пользователь не авторизован, я мог перекинуть его на страницу авторизации с передачей определенного параметра.
Обрабатывать ошибку через middleware как я показал выше, не подходит, т.к. мне нужно именно перекидывать на другую страницу пользователя в случае не авторизации только в данном маршруте, а не во всех. Как данную проблему решить? Надеюсь, понятно объяснил.
В случае, если не поймете, я покажу не реальном примере кодом что я собираюсь сделать. Сделаю даже это сейчас:
У нас имеется маршрут /authorize GET и POST. Первый метод используется для того, чтобы отобразить окно подтверждения передачи данных, а второй для подтверждения данных. Когда пользователь переходит на /authorize, я должен проверить, авторизован он или нет, в случае если пользователь не авторизован, мне нужно перекинуть его на форму авторизации /login с параметром
?redirect=https://my.site/authorize
и когда пользователь успешно авторизовался, мне нужно вновь его перекинуть на сайт который передал был в параметре redirect для подтверждения передачи данных. В случае если пользователь авторизован, то мы его никуда не перекидаем.
Можно решить это через костыль через сравнение урла req.url. Но так себе идея :)
Более кратко, это oauth2.