繁体   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