我刚学会了如何使用JSON webtoken。我已经能够在登录时生成JSON webtoken,并设置中间件来验证我的令牌并保护低于JSON验证中间件的路由。
每次我尝试访问受保护的路由时,都会通过在我的GET请求结尾添加:?token=gwt3r7r....
来手动包含令牌。
我知道在真正的应用程序中不应该这样。我希望这是动态完成的。
如何动态完成?
答案 0 :(得分:2)
实际上,在url末尾添加jwt标记并不是一种好习惯。你应该把它作为标题传递。
您可以做的是,您可以将其作为Authorization
标题传递,如果您将以下行添加到节点js侧,则可以获取它:
var token = req.headers['Authorization']
答案 1 :(得分:0)
提示:请勿使用查询参数发送令牌,而应使用HTTP标头执行此任务。
从使用nodejs api的前端应用程序,您可以使用axios等软件包向服务器发出请求。
当用户成功登录时,您可以使用
axios.defaults.headers.common['Authorization'] = token;
为每个将来的请求设置默认令牌,您可以使用此包。
在邮递员中,只需按ctrl + s
即可将您的请求与令牌一起保存。对于标题,他们有Header presets
。
您可以在标题预设中将常用标题保存在一起。在“标题”选项卡下,您可以通过从右侧的“预设”下拉列表中选择“管理预设”,为您的请求添加标题预设。
您可以参考this link进一步了解如何充分发挥邮递员的潜力。
答案 2 :(得分:0)
将令牌放入网址不是一个好习惯。
将标记放置为Authorization
标头更好,但如果在发送HTTP请求之前每次都必须汇编这样的标头,那将会很繁琐。此外,此解决方案仅适用于Ajax请求,当访问新URL /页面时它不起作用(页面保护) - 如果用户手动访问/secure/my-account
页面会发生什么?在页面重定向之前没有机会定义请求标头。
要自动在所有HTTP请求中包含jwt标记,您可以在登录成功时将其作为Cookie添加:
res.cookie('token', newToken);
通过这种方式,token
Cookie通过Set-Cookie
响应标头存储在浏览器中,并自动发送到服务器。
在服务器中,要从每个HTTP请求获取令牌,可以使用以下函数:
var getTokenFromRequest = function(req) {
if (req.cookies.token) {
return req.cookies.token;
}
return null;
};