Django CSRF失败,使用React表单

时间:2017-02-07 22:44:25

标签: django reactjs csrf

我遇到了使用Django和React的CSRF问题。

我已经阅读了围绕此问题的大量问题,以及django文档。我已经尝试了应该解决这个问题的各种不同事物的组合,但我仍然在努力解决这个问题。

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

到目前为止,我已经禁用了CSRF中间件[糟糕,我知道,只是想到某个地方]而且我得到405s,方法不允许[试图发布]。我只是觉得这可能是某人之前遇到的事情或者听起来很熟悉并且可以提供一些指导?

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

我正在使用这个种子项目:https://github.com/Seedstars/django-react-redux-base如果有人想看看,我在React中做了一点,但在Django方面做的不多,所以它离那里有点远

1 个答案:

答案 0 :(得分:1)

您不应该禁用django中的csrf检查。 而只是在您的表单/模板中 {% csrf_token %} 不是{{ csrf_token }} 它将打印一个隐藏的表单元素,其值已分配给您的csrf标记。

如果您使用的是ajax,则只需将ajax标题全局设置为:

$.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()
        })

这几乎是我能想到的所有。

希望这有帮助。