【问题标题】:CSRF verification failedCSRF 验证失败
【发布时间】:2014-01-09 09:37:14
【问题描述】:

我在我的 Django 应用程序中使用 XMLHttpRequest() 发送图像文件。这是我的脚本:

$('#edit_user_image').change(function(){
    var client = new XMLHttpRequest();
    var file = document.getElementById("edit_user_image");
    /* Create a FormData instance */
    var formData = new FormData();
    /* Add the file */ 
    formData.append("csrfmiddlewaretoken", document.getElementsByName('csrfmiddlewaretoken')[0].value);
    formData.append("upload", file.files[0]);


    client.open("post", "/upload-image/", true);
    client.setRequestHeader("Content-Type", "multipart/form-data; charset=utf-8; boundary=frontier");
    client.send(formData);  /* Send to server */ 
  });

这是我的 html 输入:

Upload New Photo
{% csrf_token %}
<input id="edit_user_image" name="image" type="file" />

但是,当创建 XMLHttpRequest() 时,即使我将它附加到数据中,它也会给出“CSRF 验证失败”错误。谁能告诉脚本中有什么问题。

【问题讨论】:

  • 尝试将 X-CSRFToken 标头设置为 CSRF 令牌的值。 Docs
  • @goliney 完成,但没有帮助。

标签: javascript python django xmlhttprequest


【解决方案1】:

以下是我所做的一些更改,现在可以正常使用:

$('#edit_user_image').change(function(){
    var client = new XMLHttpRequest();
    var file = document.getElementById("edit_user_image");
    var csrftoken = document.getElementsByName('csrfmiddlewaretoken')[0].value
    /* Create a FormData instance */

    var params = file.files[0];


    client.open("post", "/upload-image/", true);
    client.setRequestHeader("X-CSRFToken", csrftoken);
    client.setRequestHeader("Content-Type", "multipart/form-data; charset=UTF-8; boundary=frontier");
    client.send(params);  /* Send to server */ 
  });

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 2015-06-02
    • 1970-01-01
    • 2017-03-29
    • 2011-06-14
    • 2020-03-24
    相关资源
    最近更新 更多