相关疑难解决方法(0)

Django 1.9 AJAX表单CSRF令牌403错误 - "未设置CSRF cookie"

我已经在SO上看到了很多,但没有什么能解决我的问题.

问题:

启用CSRF中间件后,Django在AJAX表单请求上响应403,说明:

"未设置CSRF cookie."

文档之后,实现了一个JS功能,它设置了自定义的"X-CSRFToken"标头.

它按预期工作,从浏览器获取"csrftoken" cookie并将其与AJAX请求一起发布:

x-csrftoken: 1a0u7GCQG0wepZHQNThIXeYpMy2lZOf2
Run Code Online (Sandbox Code Playgroud)

但回应仍然是403.

尝试的解决方案:

我已经尝试过在SO或网上找到的所有内容,特别是:

  • 检查是否启用了中间件:

    MIDDLEWARE_CLASSES = [
        ...
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        ...
    ]
    
    Run Code Online (Sandbox Code Playgroud)
  • 启用了Cookie的不同浏览器;

  • 装饰我的观点@ensure_csrf_cookie;

  • {% csrf_token %}在我的模板中设置;

  • 使用render获取正确请求上下文的快捷方式

  • 设置自定义CSRF_COOKIE_NAMECSRF_HEADER_NAME我的settings.py;

  • 明确地设定CSRF_COOKIE_SECURE = FalseCSRF_COOKIE_HTTPONLY = False;

  • 明确CSRF_TRUSTED_ORIGINS设定;

  • 测试开发和生产服务器;

  • 即便request.META["CSRF_COOKIE_USED"] = True在我看来,正如有人建议的那样.

仍然一无所获.

头:

如果我使用@csrf_exemptprint(request.META)在我的视图中,很明显自定义标题"X-CSRFToken"存在于请求中并根据Django文档格式化,带有"HTTP_"前缀,用下划线替换连字符,全部大写:"HTTP_X_CSRFTOKEN".

更重要的是,它的价值与Django设置的cookie相匹配.

饼干:

奇怪的是,如果我尝试print(request.COOKIES)在我的视图中,在页面和表单加载上我可以看到 …

django cookies ajax csrf fetch-api

7
推荐指数
1
解决办法
2299
查看次数

标签 统计

ajax ×1

cookies ×1

csrf ×1

django ×1

fetch-api ×1