Маркер авторизации не был найден, когда res.redirect
У меня есть два приложения, оба на Nodejs. Один фронтэнд и другой бэкэнд. Мое фоновое приложение защищено токенным доступом с использованием промежуточного программного обеспечения express-jwt и jsonwebtoken.
Моя проблема заключается в следующем: я делаю запрос от внешнего интерфейса к внутреннему, передавая токен в заголовке, внутренний сервер принимает запрос и отвечает правильно. Затем в интерфейсе я перенаправляю ответ на определенную страницу (res.redirect ('/')), в тот момент я получаю ошибку UnauthorizedError: токен авторизации не найден
Мой запрос переднего плана:
/* Authentication */
router.post('/', function(req, res, next) {
// request login service
request({
uri: env.getUrl() + "/user",
method: 'POST',
timeout: 10000,
headers: {
'Authorization': 'Bearer '.concat(global.token)
},
form: { login : req.body.login, pwd : req.body.pwd }
}, function(error, response, body){
if(error) {
logger.error(error);
res.render("error", {message: "Error getting user" });
}
else {
if(body){
req.session.usuario = JSON.parse(body);
res.redirect("/");
} else {
res.render("login", {message: "Login Failed" });
}
}
});
});
Я не знаю, почему это произошло. Не могли бы вы помочь мне? Заранее спасибо.
2 ответа
Проблема найдена.
Каждый раз, когда мое приложение переднего плана отправляет запрос на серверную часть (api), пользователь, вошедший во внешний интерфейс, проверяется на сервере, поэтому сеанс внешнего интерфейса также обновляется. Это означает, что каждый запрос фактически является двумя запросами:
- Один как реальный запрос приложение делает.
- Запрос проверки пользователя вошел в интерфейс, чтобы убедиться, что пользователь существует.
Это обновление (второй пункт) было сделано без предоставления токена.
Перенаправление (через res.redirect) выдает новый HTTP-запрос. Это означает, что Authorization
заголовок пуст. Это приводит к ошибке UnauthorizedError.
Чтобы это исправить, у вас есть два варианта:
1. Передайте токен в URI
Вы можете выполнить перенаправление с токеном, переданным в URL следующим образом:
res.redirect("/?access_token=" + global.token);
2. Установите заголовок перед перенаправлением
Вы можете установить 'Authorization'
заголовок перед выполнением запроса перенаправления:
req.session.access_token = global.token;