2017-02-07 59 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