簡體   English   中英

為什么會出現“ CSRF令牌丟失或不正確”錯誤?

[英]Why do I get a 'CSRF token missing or incorrect' error?

我試圖從Django中的View函數返回一個值。 該函數是使用Ajax從JavsScript代碼中調用的,但是我拋出了一個錯誤,顯示為“禁止(CSRF令牌丟失或不正確)”。

的JavaScript / AJAX

錯誤訊息

HTML代碼如下所示:

    <div align="center" class="input-line">
     <form class="input-form" method="post">{% csrf_token %}
        <input type = "text" id = "ans" class = "form-control" name = "address" placeholder="Type postcode..."><br><br>
        <button id = "homeBtn" class="btn btn-primary">Find info</button><br><br>
     </form>
</div>

查看功能是:

    def result(request):
        if(request == 'POST'):
           param = request.form['my data']
           this = runAreaReview(param) #This returns a string
           return HttpResponse(this)

方法1

為了使用ajax發出發布請求,您需要設置一個名為HTTP_X_CSRFTOKEN的標頭,並將其值設置為cookie,該cookie以名稱csrftoken形式存儲在瀏覽器中。 參考 因此在ajax調用中,您應該執行以下操作。

var csrftoken = Cookies.get('csrftoken');
 $.ajax(
     ...
     headers:{"HTTP_X_CSRF_TOKEN":csrftoken}
 );

還請注意,如果您將反向代理服務器與諸如nginx之類的產品一起使用,請確保將該標頭也轉發給django應用程序。

方法2

您可以使用注釋為該特定視圖禁用csrf驗證。 參考

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def result(request):
    ...

方法3

出於安全原因,不建議使用以下方法

如果您只是出於娛樂目的而不是用於生產目的,則可以在設置中關閉csrf中間件以擺脫它。

對於遇到此線程的任何人,HEADER密鑰應為Django 2.1的X-CSRFToken ,鏈接在此處https://docs.djangoproject.com/en/2.1/ref/csrf/

暫無
暫無

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

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