如何在我的所有请求查询string中包含JSON webtoken
我刚刚学会了如何使用JSON webtoken。 我已经能够在login时生成JSON webtoken,并且还设置了中间件来validation我的令牌并保护JSONvalidation中间件以下的路由。
每次我尝试访问受保护的路由时,都会手动添加令牌: ?token=gwt3r7r....
到我的GET请求的末尾。 我知道这不应该是一个真正的应用程序的情况。 我希望这是dynamic完成的。
这如何dynamic地完成?
其实,在url结尾添加jwt token不是好习惯。 你应该把它作为标题。
你可以做的是,你可以传递它作为Authorization
标题,并在节点js端你可以得到它,如果你ipmlement下面的行:
var token = req.headers['Authorization']
把标记放在URL中不是一个好的做法。
把token作为Authorization
头是比较好的,但是如果在发送HTTP请求之前每次都要组装这样的头,这将是很乏味的。 此外,这个解决scheme只适用于Ajax请求,当访问新的URL / Page(页面保护)时,它不起作用 – 如果用户手动访问/secure/my-account
页面会发生什么? 在页面redirect之前没有机会定义请求头。
要将jwt令牌自动包含在所有的HTTP请求中,您可以在login成功时将其作为Cookie:
res.cookie('token', newToken);
通过这种方式, token
Cookie通过Set-Cookie
响应头存储在浏览器中,并自动发送到服务器。
在服务器中,要从每个HTTP请求获取令牌,可以使用以下函数:
var getTokenFromRequest = function(req) { if (req.cookies.token) { return req.cookies.token; } return null; };
提示:不要使用查询参数来发送令牌,而应该使用HTTP头来完成此任务。
从使用nodejs API的前端应用程序,您可以使用像axios这样的软件包向服务器发送请求。
当用户成功login时,可以使用
axios.defaults.headers.common['Authorization'] = token;
为每个未来的请求设置默认的令牌,你使用这个包。
更新#1
在邮递员,您可以保存您的请求以供将来使用与令牌只需按ctrl + s
对于标题,他们有Header presets
。
您可以将常用标题一起保存在标题预设中。 在“标题”标签下,您可以通过从右侧的“预设”下拉列表中select“pipe理预设”来为您的请求添加标题预设。
你可以参考这个链接进一步了解如何充分发挥邮递员的潜力。