Идея:
У меня есть защищенный маршрут "/ me", и КАЖДЫЙ ВРЕМЯ пользователь пытается туда попасть, он должен ввести свой пароль (даже если пользователь уже вошел в систему).Если пароль правильный, то пользователь идет по маршруту "/ me".
Проблема:
Я использую экспресс.На маршруте "/ me" есть промежуточное программное обеспечение под названием "Подтверждение транзакции".И когда пользователь идет по пути «/ me», это промежуточное ПО перенаправляет пользователя на «/ Подтверждение транзакции? Redirect = / me», и пользователь может видеть поле, в котором он должен ввести свой пароль.
И в данный момент я не знаю, что делать, потому что, если пароль правильный, я пытаюсь перенаправить пользователя на маршрут "/ me" (я получаю этот маршрут из параметра "? Redirect = / me"), но промежуточное ПО снова перенаправляет его на "/ Подтверждение транзакции? redirect = / me".И пользователь никогда не сможет добраться до маршрута "/ me".
Вопрос:
Как я могу решить эту ситуацию?Я знаю, что должен использовать «next ()», если пароль правильный, но я не могу этого сделать, поскольку промежуточное ПО выполняет перенаправление, и у меня больше нет «next ()»
Вот некоторыекод:
const express = require('express');
const server = express();
const requestAuthorization = (req, res, next) => {
res.redirect(301, `/confirm-transaction?redirect=${req.originalUrl}`);
};
server.get('/me', requestAuthorization, (req, res) => {
res.status(200).send("this is /me route");
});
server.get('/confirm-transaction', (req, res) => {
res.status(200).sendFile("password.html");
// there is a form with field and button with POST method to '/confirm-transaction'
});
server.post('/confirm-transaction', (req, res) => {
if (req.query.password === 'testpassword') { // it is a fake password (for testing)
res.redirect(301, req.query.redirect);
}
res.redirect(301, `/confirm-transaction?redirect=${req.query.redirect}`);
});