[英]Why do I get 'CSRF Token Missing or Incorrect' error for Javascript Request
[英]Why do I get a 'CSRF token missing or incorrect' error?
我試圖從Django中的View函數返回一個值。 該函數是使用Ajax從JavsScript代碼中調用的,但是我拋出了一個錯誤,顯示為“禁止(CSRF令牌丟失或不正確)”。
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.