res.redirect时未找到授权令牌

时间:2016-03-08 11:47:25

标签: javascript node.js express jwt express-jwt

我有两个应用程序,都在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 个答案:

答案 0 :(得分:1)

重定向(通过res.redirect)发出新的HTTP请求。这意味着Authorization标头为空。这会导致 UnauthorizedError 错误。

要解决此问题,您有两种选择:

<强> 1。在URI中传递令牌
您可以使用以这种方式在URL中传递的令牌发出重定向:

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

<强> 2。在重定向之前设置标题
您可以在发出重定向请求之前设置'Authorization'标头:

req.session.access_token = global.token;

答案 1 :(得分:-1)

发现问题。

我的前端应用程序向后端端(api)发出请求的任何时候,登录前端的用户都会针对后端进行验证,因此前端会话也会更新。这意味着每个请求实际上都是两个请求:

  1. 一个是应用程序正在执行的真实请求。
  2. 验证用户登录前端的请求,以确保用户存在。
  3. 此更新(第二点)是在未提供令牌的情况下完成的。