【发布时间】: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 的情况下将令牌从客户端发送到服务器。如果您设法从网络上如此多的分离的部分数据中理解整个工作流程,将会很高兴。