簡體   English   中英

Django Post 403禁止CSRF

[英]Django Post 403 forbidden CSRF

我有一個簡單的Django webhook,盡管我已經用csrf_exempt標記了它,但它仍然返回403 forbidden403 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驗證?

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

並聲明:

CSRF_COOKIE_SECURE = True

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

我相信您必須將其包裝在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文件

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM