如何从jQuery发送带有AJAX请求的令牌

lar*_*arz 29 javascript jquery express jwt express-jwt

我使用express-jwt并通过jQuery创建我的令牌并将其保存在我的localStorage中:

$.ajax({
  url: "http://localhost:8080/login",
  type: 'POST',
  data: formData,
  error : function(err) {
    console.log('Error!', err)
  },
  success: function(data) {
    console.log('Success!')
    localStorage.setItem('token', data.id_token);
  }
});
Run Code Online (Sandbox Code Playgroud)

我的后端有一条受保护的路线,如:

app.get('/upload',jwt({secret: config.secret}), function(req, res) {
  res.sendFile(path.join(__dirname + '/upload.html'));
});
Run Code Online (Sandbox Code Playgroud)

如何使用请求标头从localStorage发送令牌?

gne*_*kus 42

您可以在$ .ajax请求中设置标头:

$.ajax({
  url: "http://localhost:8080/login",
  type: 'GET',
  // Fetch the stored token from localStorage and set in the header
  headers: {"Authorization": localStorage.getItem('token')}
});
Run Code Online (Sandbox Code Playgroud)

  • 对于JWT标题,这对我来说很有用:标题:{"授权":'承载'+标记}` (19认同)
  • @ahmedbhs 我相信他试图以某种方式保护令牌。 (2认同)
  • 在 Javascript 中像变量一样公开 JWT 令牌时,您应该非常小心。绝对不要在前端公开它 https://developer.okta.com/blog/2018/06/20/what-happens-if-your-jwt-is-stolen (2认同)

ilk*_*ran 5

我使用下面的方法来覆盖 JWT 身份验证与结果状态类型

$.ajax({
  url: "http://localhost:8080/login",
  type: "POST",
  headers: { Authorization: $`Bearer ${localStorage.getItem("token")}` },
  data: formData,
  error: function(err) {
    switch (err.status) {
      case "400":
        // bad request
        break;
      case "401":
        // unauthorized
        break;
      case "403":
        // forbidden
        break;
      default:
        //Something bad happened
        break;
    }
  },
  success: function(data) {
    console.log("Success!");
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 但问题是如何将保存的令牌与请求一起发送。不是如何在请求后保存令牌。 (2认同)

yog*_*ing 5

如果您使用的是 JWT 身份验证,那么这就是将其添加到 .ajax() 方法中的标头的方式:

headers: {
    Authorization: 'Bearer '+token
}
Run Code Online (Sandbox Code Playgroud)

,