【问题标题】:Csrftoken is not definedCsrftoken 未定义
【发布时间】:2021-12-01 17:21:06
【问题描述】:

我正在使用文档推荐的以下代码:

            function csrfSafeMethod(method) {
                // these HTTP methods do not require CSRF protection
                return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
            }
            $("#formTabla").submit(function(event){
                event.preventDefault();
                var formData = new FormData(this);
                $.ajax({
                    beforeSend: function(xhr, settings) {
                        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                            xhr.setRequestHeader("X-CSRFToken", csrftoken);
                        }
                    }
                    url : "{% url 'submit' %}",
                    type: "POST",
                    processData: false,
                    contentType: false,
                    data: {
                        "checkboxes": formData,
                        "datos": todosDatos
                    },
                    success: function (respuesta){
                    }
                });
            });

我收到了错误:

 "Uncaught ReferenceError: csrftoken is not defined".

我明白为什么会发生这种情况,但我不知道如何解决它。我应该如何以及在哪里定义 crsftoken?

【问题讨论】:

  • 您是否检查过是否正在设置标题?如果它没有被设置,那么你只需要确定为什么逻辑流没有达到你的if 条件。如果正在设置,csrftoken的值是多少?
  • csrftoken 没有价值,它没有在任何地方定义。因此我最初的问题是:我应该如何以及在哪里定义 crsftoken?
  • 谷歌搜索“如何生成 CSRF 令牌 django”让我知道:docs.djangoproject.com/en/3.2/ref/csrf

标签: javascript python jquery django ajax


【解决方案1】:

您可以为此使用 ajaxSend()

$(document).ajaxSend(function(event, xhr, settings){
    if (!csrfSafeMethod(settings.type)) {
       xhr.setRequestHeader("X-CSRFToken", csrftoken);
    }
});

【讨论】:

    【解决方案2】:

    变量没有在任何地方定义,首先需要获取csrf_token:

    import Cookies from 'cookies-js'
    let csrftoken  = Cookies.get('csrftoken')
    
    

    然后在请求头中设置变量。

    【讨论】:

      猜你喜欢
      • 2020-11-12
      • 2016-04-02
      • 2015-08-14
      • 1970-01-01
      • 2016-11-10
      • 2013-04-14
      • 2020-11-08
      • 2016-10-10
      • 2021-03-13
      相关资源
      最近更新 更多