栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Django CSRF检查失败,并带有Ajax POST请求

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django CSRF检查失败,并带有Ajax POST请求

真正的解决方案

好的,我设法找出问题所在。它位于Javascript(正如我在下面建议的)代码中。

您需要的是:

$.ajaxSetup({      beforeSend: function(xhr, settings) {         function getcookie(name) {  var cookievalue = null;  if (document.cookie && document.cookie != '') {      var cookies = document.cookie.split(';');      for (var i = 0; i < cookies.length; i++) {          var cookie = jQuery.trim(cookies[i]);          // Does this cookie string begin with the name we want?          if (cookie.substring(0, name.length + 1) == (name + '=')) {   cookievalue = depreURIComponent(cookie.substring(name.length + 1));   break;          }      }  }  return cookievalue;         }         if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {  // only send the token to relative URLs i.e. locally.  xhr.setRequestHeader("X-CSRFToken", getcookie('csrftoken'));         }     } });

而不是官方文档中发布的代码:https:
//docs.djangoproject.com/en/2.2/ref/csrf/

工作代码来自以下Django条目:http
:
//www.djangoproject.com/weblog/2011/feb/08/security/

因此,一般的解决方案是:“使用ajaxSetup处理程序而不是ajaxSend处理程序”。我不知道为什么行得通。但这对我有用:)

以前的帖子(无答案)

我实际上遇到了同样的问题。

它在更新到Django 1.2.5之后发生-在Django 1.2.4中AJAX POST请求没有错误(AJAX不受任何保护,但效果很好)。

就像OP一样,我尝试了Django文档中发布的Javascript代码段。我正在使用jQuery 1.5。我也在使用“
django.middleware.csrf.CsrfViewMiddleware”中间件。

我尝试遵循中间件代码,但我知道它在此方面失败:

request_csrf_token = request.meta.get('HTTP_X_CSRFTOKEN', '')

然后

if request_csrf_token != csrf_token:    return self._reject(request, REASON_BAD_TOKEN)

此“如果”为true,因为“ request_csrf_token”为空。

基本上,这意味着未设置标头。那么此JS行有什么问题吗:

xhr.setRequestHeader("X-CSRFToken", getcookie('csrftoken'));

我希望提供的详细信息将有助于我们解决问题:)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391156.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号