【问题标题】:Django: Forbidden (CSRF cookie not set.)Django:禁止(未设置 CSRF cookie。)
【发布时间】:2016-11-26 12:47:50
【问题描述】:

我遇到了“未设置 CSRF cookie”的问题。我所需要的只是外部计费平台将更新发送到 django 服务器。在本地它可以与 Postman 一起使用,但在演示服务器中它不起作用...

代码

# views.py
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse

@csrf_exempt
def postback(request):
    print(request.POST)
    return JsonResponse({'ok': 'hoooh!'})

# urls.py
from django.conf.urls import url
from billing import views

urlpatterns = [
   url(r'^postback/$', views.postback),
]

错误

Forbidden (CSRF cookie not set.): /billing/postback/
[21/Jul/2016 10:49:21] "POST /billing/postback/ HTTP/1.1" 403 2682

回发到requestb服务器的结果

https://requestb.in/p0rihap0?inspect#t67d6c

环境

  • Python 3.5.1+
  • Django 1.10rc1

【问题讨论】:

  • 您确定该请求将发送到正确的位置吗?显示整个主要的 urls.py,包括“计费”映射。
  • 你的设置中有CSRF_COOKIE_SECURE = True吗?

标签: django post csrf


【解决方案1】:

如果您在设置文件中将 CSRF_COOKIE_SECURE 设置为 True,则 cookie 将被标记为“安全”,因此需要 HTTPS 连接。

这就是您收到该错误的原因。

欲了解更多信息here

【讨论】:

    【解决方案2】:

    我修改了urls.py

    如果您在 urls.py 中管理您的路由,您可以使用 csrf_exempt() 包装您想要的路由,以将它们从 CSRF 验证中间件中排除。

    from django.conf.urls import patterns, url
    from django.views.decorators.csrf import csrf_exempt
    from . import views
    
    urlpatterns = patterns('',
        url(r'^object/$', csrf_exempt(views.ObjectView.as_view())),
        ...
    )
    

    在views.py中

    class ObjectView(CreateView):
    
        def post(self, request):
            if request.method == 'POST':
                 #enter you view
    

    【讨论】:

      【解决方案3】:

      我在这里找到了解决方案: Django Rest Framework remove csrf

      我在系统的某些部分使用了 DRF,它可能会生成 CSRF 错误并忽略 csrf_exempt 装饰器。

      感谢您的帮助!

      【讨论】:

      • 豁免 csrf 有它自己的与安全相关的问题。不应该推荐
      猜你喜欢
      • 2012-05-03
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 2020-01-16
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多