2014-04-23 90 views
0

嗨即時通訊開發與symfony2和AngularJS的應用程序。我有一個表單,我通過$ post發送了$ http服務。舉例登錄表單和註冊表單。symfony2 csrf令牌無效阿賈克斯請求

錯誤我得到它的經典CSRF標記無效,並且當重新提交表單時發生。

表單提交過程第一次進行順利,用戶登錄或註冊;但如果我註銷並嘗試重新提交相同數據的表單再次登錄我得到錯誤的無效csrf令牌。

的在努力重建令牌如果表單與submited:

$這個 - >獲取( 'form.csrf_provider') - > generateCsrfToken( '身份驗證');

並在視圖上將其替換爲下次窗體將有新的令牌發送,但我得到相同的錯誤。

我做錯了什麼?

+0

您是否需要爲每個請求重新呈現表單? – Kiksy

+0

不,它的形式總是存在或顯示或隱藏在用戶菜單的登錄包裝div中,它會隱藏或顯示取決於用戶的登錄狀態 – bitgandtter

+0

您是否檢查CSRF令牌是否真的在請求? – sebbo

回答

0

我知道你很久以前問過這個問題,但今天我遇到了同樣的問題,解決方法很簡單。如果您使用其他節點渲染表單,請確保form_start與form_end位於同一節點中。 在我的情況是這樣的:

<div> 
{{form_start(form)}} 
... some form inputs 
</div> 
{{form_end(form)}} 

正如你可能知道,form_end呈現令牌(在最新的Symfony的),因此,令牌是形式之外。

當你試圖重新渲染表單時,我想這是因爲你有其他模板用於重新渲染的表單(例如有錯誤),所以請確保你的HTML層次結構是有效的。

希望它能幫助未來的人。乾杯!