【问题标题】:No authorization token was found when res.redirectres.redirect 时未找到授权令牌
【发布时间】:2016-06-22 08:22:16
【问题描述】:

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

我的问题是:我正在从前端向后端发出请求,通过标头上的令牌,后端接受请求并正确响应。然后在前端我将响应重定向到特定页面 (res.redirect('/')),在那一刻我收到错误 UnauthorizedError: No authorization token被发现了

我的前端请求:

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

我不知道为什么会这样。你可以帮帮我吗? 提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    1.在 URI 中传递令牌
    您可以通过这种方式使用 URL 中传递的令牌发出重定向:

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

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

    req.session.access_token = global.token;
    

    【讨论】:

    • 重定向(通过 res.redirect)发出一个新的 HTTP 请求,同意。但是 res.redirect 是在前端完成的,这意味着 res 对象来自前端。我的理解是它不应该再次调用后端。此外,我尝试了第二个选项,将令牌再次放入 req 对象中,但放入 headers 参数中,而不是会话中。它没有用。
    • 会不会是因为两个应用程序都在本地主机中? (但在不同的端口上)
    【解决方案2】:

    发现问题。

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

    1. 一个作为应用程序正在执行的真正请求。
    2. 验证用户登录前端的请求,以确保用户存在。

    此更新(第二点)是在未提供令牌的情况下进行的。

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 2019-12-11
      • 2019-04-03
      • 2019-08-13
      • 2023-03-31
      • 2017-06-12
      • 2018-06-05
      • 2020-10-20
      • 1970-01-01
      相关资源
      最近更新 更多