axios 未在生产中发送 X-CSRFToken 标头

Posted

技术标签:

【中文标题】axios 未在生产中发送 X-CSRFToken 标头【英文标题】:axios is not sending X-CSRFToken header in production 【发布时间】:2021-03-13 04:05:12 【问题描述】:

我在 Heroku 上部署了 django rest,域如下:api.herokuapp.com

在前端我有 React 域,例如:dashboard.mydomain.com

axios 的设置是:

axios.defaults.withCredentials = true;
axios.defaults.xsrfCookieName = "csrftoken";
axios.defaults.xsrfHeaderName = "X-CSRFToken";

本地一切正常。

生产中: 发出 POST 请求时出现 403 错误:CSRF Failed: CSRF token missing or incorrect

看到请求发送了cookie:

但它没有发送X-CSRFToken 标头。

本地正常发送标头。

我怀疑这可能是因为生产是 HTTPS 或因为域不同,但我对此了解不多。

可能是什么原因?

【问题讨论】:

【参考方案1】:

使用这个

axios.defaults.headers.common['X-CSRF-TOKEN'] = token;

【讨论】:

谢谢,你是用 js-cookie 包获取令牌还是硬编码? 我提取了后端发送的代码。如果您喜欢答案,可以投票。 如果 cookie 是 HttpOnly,这将不起作用

以上是关于axios 未在生产中发送 X-CSRFToken 标头的主要内容,如果未能解决你的问题,请参考以下文章

Axios 未在请求中发送自定义标头(可能是 CORS 问题)

使用 Axios 从 React 向 Django 发送数据 - 发布请求为空

Axios/XMLHttpRequest 在生产环境中发送 GET 而不是 POST

Axios未在请求中放置原始标头

Axios 基本授权未在 Reactjs 中通过

酶集成测试:axios.get 调用未在 redux-saga 中执行