![](/img/trans.png)
[英]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.