【问题标题】:Django Post 403 forbidden CSRFDjango Post 403 禁止 CSRF
【发布时间】:2018-11-06 21:48:20
【问题描述】:

我有一个简单的 Django webhook,尽管我已将其标记为 csrf_exempt,但它仍不断返回 403 forbidden

以下是相关代码:

urls.py

 ...
 url(r'^mail/$', MailView.as_view(), name="mail"),
 ...

view.py

class MailView(View):
    @csrf_exempt
    def dispatch(self, *args, **kwargs):
        return super(MailTrackingView, self).dispatch(*args, **kwargs)

    def post(self, request, *args, **kwargs):
        return HttpResponse(status=204)

当向这个端点发送数据时,Django 给出一个

Forbidden (CSRF cookie not set.): /mail/

我还需要设置什么才能不执行 CSRF 验证?

【问题讨论】:

    标签: django csrf


    【解决方案1】:

    在模板中的表单中添加 { %csrf_token% }。

    并声明:

    CSRF_COOKIE_SECURE = True
    

    https://docs.djangoproject.com/en/2.0/ref/settings/#csrf-cookie-secure

    【讨论】:

    【解决方案2】:

    我相信你必须把它包裹在method_decorator 试试

    class MailView(View):
        @method_decorator(csrf_exempt))        
        def dispatch(self, *args, **kwargs):
            return super(MailTrackingView, self).dispatch(*args, **kwargs)
    

    你也可以这样做:

    @method_decorator(csrf_exempt, name='dispatch')
    class MailView(View):
    

    更新

    您是否将 CSRF_USE_SESSIONS 设置为 True?

    这是我用来测试它的代码,它按预期工作;如果装饰器被注释掉,我得到一个 403 CSRF 失败,如果它被留下,那么我的帖子成功。

    查看文件

    class MyView(View):
    
        @method_decorator(csrf_exempt)
        def dispatch(self, *args, **kwargs):
            return super(MyView, self).dispatch(*args, **kwargs)
    
        def post(self, request, *args, **kwargs):
            return HttpResponse(status=204)
    
        def get(self, request, *args, **kwargs):
            form = """
            Authenticated: {}
            <form method="post">
                <label for="your_name">Your name: </label>
                <input id="your_name" type="text" name="your_name">
                <input type="submit" value="OK">
            </form>
            """.format(request.user.is_authenticated())
            return HttpResponse(form)
    

    网址文件

        url(r'^test/', views.MyView.as_view()),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-15
      • 2013-05-25
      • 2021-10-08
      • 1970-01-01
      • 2018-06-06
      • 2018-11-05
      • 2016-09-16
      • 2015-10-15
      相关资源
      最近更新 更多