Axios:如何手动附加 X-XSRF-TOKEN 标头?

Posted

技术标签:

【中文标题】Axios:如何手动附加 X-XSRF-TOKEN 标头?【英文标题】:Axios: How to attach X-XSRF-TOKEN header manually? 【发布时间】:2022-01-12 20:38:47 【问题描述】:

我正在使用 Vue 开发 s-s-r 应用程序。 API 是使用 Laravel 框架制作的,我正在使用 axios 向 API 发送请求。

我必须在服务器端发出一个 POST 请求以获取它的响应并在初始页面加载时呈现它。为了获取 POST 请求的 CSRF 令牌,Laravel API 提供了一个端点,以 JSON 形式发送 CSRF 响应(而不是 cookie,因为 cookie 不能在服务器端使用)。

我通过以下方式附加 csrf 令牌:

this._vm.$api.post('/api/s-s-r-csrf-token').then(response => 
    console.log("Token: ", response.data.token); // This shows that csrf is fetched correctly
    
    let config = 
        headers: 
          'X-XSRF-TOKEN': response.data.token
        
    ;

    this._vm.$api.post('/api/product/categories',  some: "thing", config).then(response => 
        console.log("Categories: ", response.data.data);
    ).catch(err => 
        console.log(err);
    )
).catch(err => 
    console.log(err);
)

但是以这种方式发送请求仍然会出现 “CSRF 令牌不匹配” 错误。即使令牌附加到请求。

当我使用 Postman 在类别端点上获取结果时,一切正常,并且我得到了应有的响应。但是从我的 s-s-r 项目发出请求,我没有收到响应。

我需要做什么才能得到回复?任何帮助将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

您可以将令牌附加到 axios.defaults.headers.common。

下次当你打电话时,它会自动将你的令牌设置为标题。

this._vm.$api.post('/api/s-s-r-csrf-token').then(response => 
    console.log("Token: ", response.data.token); // This shows that csrf is fetched correctly

    // set token to your header
  axios.defaults.headers.common['Authorization'] =
      'Bearer ' + response.data.response.access_token;

    this._vm.$api.post('/api/product/categories',  some: "thing").then(response => 
        console.log("Categories: ", response.data.data);
    ).catch(err => 
        console.log(err);
    )
).catch(err => 
    console.log(err);
)

现在您不必在请求中包含配置变量。它会自动设置为您所有通话的标题。

【讨论】:

谢谢您或您的回复。但这不是不记名令牌,而是 CSRF/XSRF 令牌,需要作为 X-XSRF-TOKEN 附加到请求中。此外,正如我指出的那样,使用 Postman 附加令牌可以正确给出响应。但是从 Axios 附加它会出错。使用您回复中的方法,错误仍然存​​在。

以上是关于Axios:如何手动附加 X-XSRF-TOKEN 标头?的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的 JWT 令牌附加到每个 axios 调用?

如何使用 HttpClientXsrfModule angular 6 添加 x-xsrf-token

Laravel:CSRF 令牌与 X-XSRF-TOKEN 不匹配 [重复]

angular4 httpclient csrf 不发送 x-xsrf-token

如何将手动数据附加到struct Codable数组?

使用 X-XSRF-TOKEN(如 angularjs)标头确保 CSRF 保护