我有一个用香草JS,Pug和Node编写的简单多页站点,该站点使用JWT登录。用户登录时,将向客户端返回JWT。 JWT存储在localStorage
中。现在,当用户在给定页面上单击指向受保护路由的链接时,我需要将JWT发送到服务器,以便它可以验证JWT是否有效(即用户已登录)。
我了解我可以针对给定的受保护路线执行以下操作:
$.ajax({
url: "/protected",
type: "GET",
headers: {
'Authorization': 'Bearer ' + <token>
}
success: (res) => {
if (res.status == 200) {
window.location.replace("/profile");
}
else {
window.location.replace("/login");
}
},
error: (err) => { console.log(err) }
});
单击简单的链接似乎有很多开销。是将JWT添加到请求标头的推荐方法还是有更好的方法?
答案 0 :(得分:0)
是的,这几乎是唯一的方法。但是,为了简化您的工作,您可以在上述ajax
方法上创建一个包装器,并将该函数用于受保护的路由。
function authAjax(url, method, successCallback, errorCallback){
$.ajax({
url: url,
type: method,
headers: {
'Authorization': 'Bearer ' + <token>
}
success: (res) => {
if (res.status == 200) {
successCallback(res)
}
else {
window.location.replace("/login");
}
},
error: (err) => {
console.log(err)
errorCallback(err)
}
});
}
并像这样使用
:authAjax('/protected', 'GET', (data) => {
console.log('API res', data)
}, (err) => {
alert('Sorry, Something went wrong :(')
})