Django 1.9 AJAX表单CSRF令牌403错误-“;未设置CSRF cookie“;
关于这件事我已经看过很多了,但是没有什么能解决我的问题 问题: 启用CSRF中间件后,Django在AJAX表单请求上以403响应,声明: “未设置CSRF cookie。” 之后,实现了一个JS功能,它设置自定义的“X-CSRFToken”头 它按预期工作,从浏览器中获取“csrftoken”cookie,并将其与AJAX请求一起发布:Django 1.9 AJAX表单CSRF令牌403错误-“;未设置CSRF cookie“;,ajax,django,cookies,csrf,fetch-api,Ajax,Django,Cookies,Csrf,Fetch Api,关于这件事我已经看过很多了,但是没有什么能解决我的问题 问题: 启用CSRF中间件后,Django在AJAX表单请求上以403响应,声明: “未设置CSRF cookie。” 之后,实现了一个JS功能,它设置自定义的“X-CSRFToken”头 它按预期工作,从浏览器中获取“csrftoken”cookie,并将其与AJAX请求一起发布: x-csrftoken: 1a0u7GCQG0wepZHQNThIXeYpMy2lZOf2 但反应仍然是403 尝试过的解决方案: 我已经尝试了在SO或we
x-csrftoken: 1a0u7GCQG0wepZHQNThIXeYpMy2lZOf2
但反应仍然是403
尝试过的解决方案:
我已经尝试了在SO或web上可以找到的一切,特别是:
- 检查是否启用了中间件:
MIDDLEWARE_CLASSES = [ ... 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', ... ]
- 启用cookie的不同浏览器
- 用
装饰我的视图@sure_csrf_cookie
- 在我的模板中设置
{%csrf_token%}
- 使用
快捷方式获取正确的请求上下文render
- 在my
settings.py中设置自定义
和CSRF\u COOKIE\u NAME
CSRF\u HEADER\u NAME
- 显式设置
和CSRF\u COOKIE\u SECURE=False
CSRF\u COOKIE\u HTTPONLY=False
- 显式设置
CSRF\u可信\u来源
设置
- 开发和生产服务器测试
- 正如有人建议的那样,在我看来,甚至
request.META[“CSRF\u COOKIE\u USED”]=True
@csrf\u export
和print(request.META)
,很明显,定制头“X-CSRFToken”存在于请求中,并根据Django文档格式化,前缀为“HTTP\uu”,连字符替换为下划线,全部大写:“HTTP\u X\u CSRFToken”
更重要的是,它的值与Django设置的cookie相匹配
Cookies:
奇怪的是,如果我尝试在视图中打印(request.COOKIES),在页面和表单加载中,我可以看到“csrftoken”cookie,但在AJAX请求中,字典是空的。这可能是问题所在吗
不顾一切地寻找到底是什么错了。谢谢您阅读此文。好的,问题很简单: 默认情况下,获取API不发送凭据。根据: 请求接口的凭据只读属性指示 用户代理是否应从中的其他域发送cookie 跨来源请求的情况。这与XHR类似 withCredentials标志,但有三个可用值 默认值为省略,它从不发送cookie。您只需将
同源
添加到fetch()
函数参数:
fetch(formUrl, {
...
credentials: 'same-origin',
...
})
您可以开始了:)您可以显示您的实际视图和javascript吗?您使用什么发送AJAX请求?jQuery?@Smile0ff:Fetch API.Lol,阅读您的调试过程有点不可思议,因为我按照基本相同的顺序执行了完全相同的步骤:)