2013-08-16 31 views
2

我得到了一個表單。當我更改該表單中的選擇元素時,我會對同一個URL執行Ajax調用,這個URL基本上會加載一個新的表單,其中包含一些額外的字段或刪除了一些字段(不同的類別,不同的字段...)。如何爲一個表格生成一個新的Csrf-Token

現在,我從請求中獲得的表格顯然將具有相同的Csrf-令牌,因爲令牌爲一個請求生存。意思是,每當我做這種行爲時,我都必須生成一個新的標記,但我對如何做到這一點並不知情。

我的假設是,我必須這樣做

if ($request->isXmlHttpRequest()) { 
    $form->get('csrf') ->regenerateCsrfToken() 
} 

但很明顯的是功能不存在,但它應該是一樣的線條。任何投入將不勝感激

回答

4

你有沒有嘗試過這樣的:

if ($request->isXmlHttpRequest()) { 
    $form->get('csrf')->getCsrfValidator()->getHash(true); 
} 

getHash(true)將重新生成散列,和改變的哈希存儲在發電機,所以當你從檢索您的形式將獲取新的價值元素後面。

1

@MichaelGooden的答案絕對正確。這是解決問題的一般方法。然而,我所做的還有另一個錯誤,這可能與其他用戶有關。我對select.onChange()方法是:

  • 保存表單數據
  • 得到新的形式(GET /項目/添加/的categoryId)
  • 重新填寫相同的表單字段

這樣做,我不小心保存CSRF-Token,並將存儲的令牌重新填充爲新的令牌。顯然這是行不通的。所以在我的form.rePopulate(data)函數中,我簡單地排除了CSRF-Element,就是這樣,所有這些都像魅力一樣工作。

相關問題