【问题标题】:jwt on node - how does the client pass the token back to the serverjwt on node - 客户端如何将令牌传递回服务器
【发布时间】:2015-11-01 13:45:28
【问题描述】:

好的。

我认为我没有理解基于令牌的身份验证的基本部分。

我正在使用带 express 的 node,如果您尚未登录,我正在使用 jwt 来阻止访问我的网站。我可以在登录页面上创建一个令牌,然后我可以将其发送回客户端并将其存储在本地存储/cookie。现在,如果用户想要导航到另一个页面,他们将输入一个 url 并触发一个 get 请求。

在加载页面作为获取请求的一部分之前,如何从 localStorage/cookie 访问该令牌并将其传递给服务器。我的假设是应该有一种方法将令牌传递给服务器 - 在中间件中拦截它 - 如果令牌是合法的,则加载页面,或者如果令牌未正确验证,则重定向到登录页面。

在发布请求时,这会简单得多,因为您可以在页面加载后获取令牌并将其作为 ajax 调用的一部分传递。

我已经看到将令牌作为请求标头(授权承载)的一部分的引用。我认为这仅适用于发布,因为如果您能够将标头参数设置为“全局”,那么您为什么还要费心将客户端存储在 cookie/localStorage 中。

如您所见,我对工作流程有些困惑。似乎我以某种方式违背了粮食。任何澄清将不胜感激。

【问题讨论】:

  • 如果您在 cookie 中发送令牌,那么它将在客户端的任何 get/post 请求中接收。
  • @Hiren 我已经在登录发布请求的回调中尝试了这个 document.cookie = result.token。我查看了后续获取请求中的键,例如我看不到 req.cookie。我应该在哪里寻找。
  • 在 node.js 服务器上,您可以使用 request.headers.cookie 读取并希望您已包含 cookie-parser 模块
  • @Hiren - 哇,我简直不敢相信。我在 req 上记录了 res 的键 - 这就是为什么我错过了标题中的 cookie!我想我不会再回到那些时间了 :) 不过感谢您的帮助,否则我会被困在阅读博客上更多小时。 - 作为旁注 - 如果您不使用 cookie,您应该如何获取令牌?
  • 哈哈!这就是我要问的问题,似乎没有多少机构愿意回答,我所有的搜索都达到了不集中的内容,特别排除了那部分,如何在不使用 cookie 的情况下将令牌从客户端发送到服务器。如果您设法从网络上如此多的分离的部分数据中理解整个工作流程,将会很高兴。

标签: node.js express jwt


【解决方案1】:

如果您使用 localStoage 来存储 JWT,那么将其传递给服务器的最简单方法是首先使用 localStorage.getItem('token')(或任何您的令牌名称)从 localStorage 检索令牌,然后将其插入请求的标头中(它是 GET 或 POST/PUT/DELETE)。根据您用于处理客户端上的 http 请求的库,有不同的方法可以这样做。例如,在 jQuery 中,您可以在 AJAX 请求中执行以下操作:

$.ajax({
    url: API_URL + "/endpoint",
    method: "GET",
    beforeSend: function(request){
        request.setRequestHeader("Authorization", "BEARER " + localStorage.getItem('token'));
    }
})

在此之后,在服务器端只需像往常一样通过访问request.header 选项来访问参数。希望这会有所帮助!

【讨论】:

  • 按照我的理解,问题是关于什么时候 http 请求根本不是由 JavaScript(有或没有库)发出的,而是由浏览器本身首先加载页面。所以任何基于 JavaScript 的方法都行不通。
猜你喜欢
  • 2020-01-31
  • 1970-01-01
  • 2019-09-06
  • 2013-05-07
  • 2017-08-13
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 2019-02-16
相关资源
最近更新 更多