Ajax是向请求标头添加jsonwebtoken(JWT)的最佳/唯一方法吗?

时间:2018-11-12 18:09:26

标签: jwt

我有一个用香草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添加到请求标头的推荐方法还是有更好的方法?

1 个答案:

答案 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 :(')
})