2012-07-31 64 views
8

我有問題與鐵路真實性令牌和設計登錄/註銷。Rails的CSRF令牌的真實性和設計

我正在使用骨幹js構建單頁面應用程序,所以我使用ajax來登錄/註銷用戶。這是我正在觀察的,我不明白爲什麼會發生這種情況。

我的佈局中有csrf_meta_tags。頁面加載後,我點擊登錄按鈕填寫表單並提交,我已成功登錄。我可以做一個登錄用戶應該能夠做的事情。

現在我單擊一個註銷按鈕,通過ajax發送DELETE請求,並且我已成功註銷。

上面的所有過程都在單個頁面上沒有頁面重新加載發生其所有ajax。

現在當我再次單擊登錄並填寫表單時,它會發送ajax請求,將我登錄但在服務器控制檯顯示警告消息。

WARNING: Can't verify CSRF token authenticity 

現在爲什麼它(設計)登錄我,擺在首位,如果它(軌道)無法驗證CSRF令牌的真實性。

,現在當我嘗試做的事情,一個登錄的用戶應該能夠做到這一點失敗,提交表單失敗,從色器件

401 Unauthorized {"error":"You need to sign in or sign up before continuing."} 

錯誤消息,並且在服務器控制檯上的警告

WARNING: Can't verify CSRF token authenticity 

,並在這一點上,我登出,如果我刷新頁面我自己,我可以看到,我沒有更多的登錄。

這是怎麼回事?

第一次登錄後,我的第一個真實性標記是否過期?

我使用提前

rails (3.2.3) 
devise (2.1.0) 

謝謝:)

+2

完全相同的問題,我有。如果您找到解決方案,請發表評論。 Thx – vrepsys 2012-08-07 13:50:36

+0

我知道問題出現的原因。因爲csrf令牌在註銷時到期,並且由於它基於ajax的sign_out,頁面不會重新加載,並且新的令牌不會在頁面上獲得,從而導致後續請求不匹配。現在我正在重新加載sign_out上的頁面來解決這個問題。有人(可能是你?)在設計郵件列表上發佈了相同的內容。讓我們看看我們是否可以在那裏得到一些東西... – Abid 2012-08-07 17:05:37

+0

@Abid,我得到了與我的舊鐵路項目相同的錯誤,它讓我發瘋,你找到解決方案嗎?如果你是hava,請告訴我們,tkx – Neo 2012-11-12 15:06:02

回答

1

你必須發送authenticity_token變量,所有的Ajax請求。你可以從頁面的元標記中填寫它。

+0

它正在發送。這個問題只發生在我第二次登錄時..看起來這個令牌只適用於一個會話 – Abid 2012-07-31 11:59:15

相關問題