我搜索了许多有关该主题的问题和答案,但无法解决我的问题。我的js基于这个答案
xxx.js
import Cookies from 'js-cookie';
async function sendDataToAPI(uri, params) {
let url = buildURI(uri, params);
let endpoint = `${process.env.API_DOMAIN}${url}/`;
try {
const response = await fetch(endpoint, {
method: "POST",
credentials: 'include',
headers: {'X-CSRFToken': Cookies.get('csrftoken')},
body: JSON.stringify({
data: params,
}),
}
);
const data = await response.json();
return data;
...
设置.py
...
CSRF_TRUSTED_ORIGINS = [
'http://localhost:8888'
]
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = (
'http://localhost:8888',
)
CORS_ALLOW_HEADERS = [
"X-CSRFToken",
]
CORS_ALLOW_CREDENTIALS = True
...
INSTALLED_APPS = [
...,
'corsheaders',
...
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
...
]
我收到错误
警告:django.security.csrf:禁止(未设置 CSRF cookie。)
发生此错误并且启用
DEBUG
时,您应该在浏览器上看到此消息:
- 您的浏览器正在接受cookie。
- 视图函数将请求传递给模板的渲染方法。
- 在模板中,每个针对内部 URL 的 POST 表单内都有一个 {% csrf_token %} 模板标记。
- 如果您不使用 CsrfViewMiddleware,则必须在使用 csrf_token 模板标记的任何视图以及接受 POST 数据的视图上使用 csrf_protect。
- 该表单具有有效的 CSRF 令牌。登录另一个浏览器选项卡或登录后点击后退按钮后,您可能需要使用表单重新加载页面,因为登录后令牌会轮换。
就我而言,所有这些要求都是正确的 - 除了我有
CSRF_COOKIE_SECURE = True
并且我通过 http://
(而不是通过 https://
)访问 Django 网站。