2017-02-07 38 views
2

我在使用Django和React的CSRF时遇到问题。Django CSRF失败,使用React表格

我已经通读了很多关于此问题的疑问,以及django文档。我尝试了所有可能的解决问题的各种可能的组合,但我仍然在为此付出努力。

首先我试图创建一个注册页面,但是当我发布到注册/我得到CSRF的cookie没有设置,403

我有这么走得更远,禁用CSRF中间件[糟糕,我知道,只是想得到某处],我得到405s,方法不允许[尝试发布]。我只是想,也许这是某个人曾经遇到过的事情,或者听起来很熟悉,可以提供一些指导?

我曾尝试: - 添加装饰@csrf_exempt, - 添加CSRF到请求的头部, - 将整个饼干, - 附加隐藏的表单字段与令牌。

我使用这个种子工程:https://github.com/Seedstars/django-react-redux-base如果有人想看看,我做了一个有点反应,但不是在Django的侧很多,所以它是不远处那里有什么

回答

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

这些都是几乎所有的人我可以考虑到。

希望这会有所帮助。

+0

这正是我所做的,但无济于事。当我查看请求的请求头时,我注意到尽管代码中有'X-CSRFToken',但它显示为'x-csrftoken',但我认为这不是问题吗? – carrera

+0

你使用的是什么版本的Django?你可以发布你的标题副本吗? –

+0

谢谢你的回复贾斯汀!我将编辑帖子以包含代码,谢谢! Django的版本是1.8.15 – carrera