Django CSRF 失败,使用 React 表单

Django CSRF failure, using React forms

我在使用 Django 和 React 时遇到 CSRF 问题。

我已经阅读了很多关于这个的问题,当然也阅读了 django 文档。我已经尝试了应该解决问题的不同方法的所有可能组合,但仍在努力解决这个问题。

首先我尝试创建一个注册页面,但是当我POST注册/我得到 CSRF cookie 未设置,403。

我已经禁用了 CSRF 中间件[我知道很糟糕,只是想到达某个地方],我收到 405s,方法不允许 [试图 post]。我只是想也许有人 运行 以前听过这件事,或者听起来很熟悉,可以提供一些指导吗?

我试过: - 添加装饰器@csrf_exempt, - 将 CSRF 添加到请求的 header 中, - 附上整个饼干, - 使用令牌附加隐藏的表单字段。

我正在使用这个种子项目:https://github.com/Seedstars/django-react-redux-base如果有人想看一看,我在 React 方面做了一些工作,但在 Django 方面做的不多,所以相距不远有什么

你不应该在 django 中禁用 csrf 检查。 而不是在你的 form/template 中简单地做 {% csrf_token %} 不是{{ csrf_token }} 它将打印一个隐藏的表单元素,其值已经分配给您的 csrf 令牌。

如果您使用 ajax,您只需将 ajax headers 全局设置为:

$.ajaxSetup({
        beforeSend: function (xhr, settings) {
            // this time double brackets
            xhr.setRequestHeader("X-CSRFToken", "{{csrf_token}}"); 
        }
    });

如果您正在使用 fetch 那么:

fetch('some/url/here', {
            method: 'GET',
            headers: {
                'X-CSRFToken': window.CSRF_TOKEN // or pass it in your own way
            }
        }).then(function (response) {
            return response.json()
        })

我能想到的差不多就这些了

希望这对您有所帮助。