res.redirect时没有find授权令牌

我有两个应用程序,都在Nodejs上。 一个前端和另一个后端。 我的后端应用程序受到使用express-jwt和jsonwebtoken中间件的令牌访问的保护。

我的问题是:我正在从前端向后端传递标头上的令牌,后端接受请求并正确响应。 然后在前端我将响应redirect到特定的页面( res.redirect('/') ),在那一刻我得到错误UnauthorizedError:没有find授权令牌

我的前端请求:

/* 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" }); } } }); }); 

我不知道这是为什么发生。 你可以帮帮我吗? 提前致谢。

redirect(通过res.redirect )发出一个新的HTTP请求。 这意味着Authorization头是空的。 这会导致UnauthorizedError错误。

要解决这个问题,你有两个select:

1.在URI中传递令牌
您可以通过以下方式使用URL中传递的令牌进行redirect:

 res.redirect("/?access_token=" + global.token); 

2.在redirect之前设置标题
您可以在进行redirect请求之前设置'Authorization'标题:

 req.session.access_token = global.token; 

发现问题。

无论何时,当我的前端应用程序向后端(api)发出请求时,login前端的用户都会对后端进行validation,因此前端的会话也会更新。 这意味着每个请求实际上是两个请求:

  1. 一个作为应用程序正在做的真正的请求。
  2. 请求validation用户login在前端为了确定用户存在。

这个更新(第二点)是在没有提供令牌的情况下进行的。