Django X-CSRFToken 已设置但仍然收到 403 禁止

ybd*_*ire 5 python django csrf django-csrf

我开发了一个 Django 文件上传 API,它接收来自客户端的发布数据并将数据保存为文件。

根据Django CSRF 手册,HTTP 请求标头应使用 csrftoken cookie 值设置 X-CSRFToken。我已经通过下面的代码设置了 X-CSRFToken,但是 Django 服务器仍然禁止 POST 请求(403),如下图所示。

$(document).ready(function(){
    var authid
    $.get("http://localhost:8000/v1/getAuthID?username=testuser1&password=123", function(data){
        authid = data["authid"];
        var csrftoken = $.cookie('csrftoken');
        console.log(csrftoken);

        $.ajaxSetup({
            beforeSend: function(xhr, settings) {
                xhr.setRequestHeader("X-CSRFToken", csrftoken);
            }
        });

        url = "http://localhost:8000/v1/file".replace("{authid}", authid).replace("{token}", csrftoken)
        $.post(url, function(data){
        })
    })
})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您是如何通过向 Django 服务器发送 POST 请求来克服 Django CSRF 的?

谢谢!

jus*_*ile 1

将 ajaxSetup 移到 AJAX 成功函数之外,因为请求需要它,而不是在请求之后。

$(document).ready(function(){
    var authid;
    var csrftoken = $.cookie('csrftoken');
    console.log(csrftoken);

    $.ajaxSetup({
        beforeSend: function(xhr, settings) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    });


    $.get("http://localhost:8000/v1/getAuthID?username=testuser1&password=123", function(data){
        authid = data["authid"];

        url = "http://localhost:8000/v1/file".replace("{authid}", authid).replace("{token}", csrftoken)
        $.post(url, function(data){
        })
    })
})
Run Code Online (Sandbox Code Playgroud)