2013-07-08 17 views
5

我正在嘗試創建一個頁面,其中包含兩種形式:一種在頁面加載時可見(一種登錄表單),另一種在用戶單擊按鈕(註冊表單)時出現在模式中。兩種形式的包含如何影響我的CSRF令牌使用?

我使用Django,而且,雖然我還是搞清楚我將如何處理這些形式,我最大的擔心是CSRF令牌將如何發揮到了這一切。例如,我應該只在<form></form>標籤中使用{% csrf_token %},還是應該將它放在兩個?

此外,如果我在兩種形式中都使用它,這會影響我的POSTS到服務器的任何方式嗎?目前,我走的是數據的形式(取決於點擊提交按鈕)和張貼這樣:

var data={ 
    'username':$('#username').val(), 
    'password':$('#password').val(), 
    'csrfmiddlewaretoken': '{{ csrf_token }}' 
} 

$.post("/", signin_data); 
+1

你應該只要雙方正在在服務器端通過'GET'或'POST'訪問其放置在兩個和YES,你可以將其放置在兩個沒有任何問題 – karthikr

+0

完美。 @karthikr如果你能回答這個問題作爲答案,我將不勝感激,以便我可以將其標記爲正確。另外,你能否包括我將如何訪問csrf標記?謝謝! – nmagerko

回答

5

csrf_token應放置在兩個形式,只要雙方都在服務器上訪問方通過GETPOST,並且您是可以使用相同的csrf_token兩種形式沒有任何問題。

你可以做這樣的事情

<form action="." >{% csrf_token %} 
    {{form1.as_p}} 
</form> 
當你做 data=form.serialize()

,該csrf令牌在Ajax請求的data自動序列。

原因多{% csrf_token %}作品是因爲所有的令牌確實是提供驗證信息表單請求是有效的(篡改)用戶會話。