Reactjs 使用React for frontend时从Django获取CSRF会话cookie 背景

Reactjs 使用React for frontend时从Django获取CSRF会话cookie 背景,reactjs,django,django-views,django-csrf,Reactjs,Django,Django Views,Django Csrf,我一直试图从React前端向我的应用程序后端(用Django编写)发出POST请求,但请求失败,因为请求不包含CSRF令牌。以下是我用来设置和发送请求的代码: const formData = new FormData() // 'image' is a user uploaded image formData.append( "myImage", image, image.name )

我一直试图从React前端向我的应用程序后端(用Django编写)发出POST请求,但请求失败,因为请求不包含CSRF令牌。以下是我用来设置和发送请求的代码:

    const formData = new FormData()

    // 'image' is a user uploaded image
    formData.append(
        "myImage",
        image,
        image.name
    )

    const data = await axios.post("http://localhost:8000/myendpoint", formData)
    return data
我的应用程序非常简单,不需要进行登录/会话维护,要使用该应用程序,用户只需向Django API的端点提供一些数据(准确地说是上传图像),然后获得一些结果。以下是我在Django服务器日志中看到的内容供参考:

禁止(未设置CSRF cookie)::/myendpoint

下面是我在浏览器控制台中看到的错误:

职位http://localhost:8000/myendpoint 403(禁止)

基于一些与我类似的问题,建议从Django发送的
csrftoken
cookie中检索此CSRF令牌,然后将其包含在后续POST请求中(例如,应答)。我不认为这会起作用,因为在
localhost:3000
时,我在浏览器的开发窗口中没有看到任何cookie,但我尝试不考虑,并将cookie视为未定义:

CSRF令牌:未定义

我使用此代码尝试获取cookie(使用库):

问题: 如果这是我正在发送的唯一请求,那么在发送POST请求之前,有没有办法从Django获取CSRF令牌cookie?我知道一些“黑客”的方法,比如在我的端点上使用
csrf\u豁免
装饰器,但我想知道是否有一种方法可以让它在没有它的情况下工作


谢谢

嗨@iklinac!上面提到的我似乎使用了很多文档中提到的内容,虽然我尝试的cookie也是从文档中获取CSRF令牌的方法,但问题是我不确定如何让Django将cookie发送到我的前端,因为我只提出了一个POST请求,这反过来又要求我使用cookie中的信息(我没有),你肯定是在做一个GET请求,作为呈现前端的一部分,对吗?你能在那里设置cookie吗?如果没有用户,CSRF就没有意义了,因为没有什么可以劫持的,而且你的问题需要更多的关注,因为有多个问题,而且大多数问题都在文档中得到了回答。csrf_豁免不是黑客攻击,而是在单个端点上禁用csrf的一种方法,不需要CSRF@Dave我没有向Django发出GET请求,因为我的前端与后端完全分离。
    var csrftoken = Cookies.get('csrftoken');
    console.log(`CSRF Token: ${csrftoken}`)