所以在我的Rails 4.0應用程序中,我使用Devise進行身份驗證管理,並且我注意到當我嘗試退出過期時出現500錯誤會話。我不確定問題出在哪裏。我看到一些不同的潛在來源:設計會議退出引發'無效的真實性令牌'異常
1)我不完全瞭解如何驗證真實性標記,但我的理解是它來自會話存儲中的某些內容。在這種情況下,我的會話存儲器配置如下:
*配置/初始化/ session_store.rb *
MyApp::Application.config.session_store ActionDispatch::Session::CacheStore, :expire_after => 20.minutes
當我註銷並收到此錯誤,20分鐘以上的通過,所以我的會議應該在緩存中過期。我不想增加這個數字,只是爲了能夠退出我的會話。這似乎沒有多大意義。
2)另一種可能性是在Devise的配置中。我正在使用Devise Timeoutable模塊的默認設置,如下所示。
配置/初始化/ devise.rb
# ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity. After this
# time the user will be asked for credentials again. Default is 30 minutes.
config.timeout_in = 30.minutes
# If true, expires auth token on session timeout.
config.expire_auth_token_on_timeout = false
我會假設,設計將足夠聰明來檢查令牌已經過期,只是通過我通過,如果是的。否則,它試圖摧毀一個零會話,這再次沒有任何意義。
3)最後的可能性是Devise會話控制器本身。也許我需要把這樣的:
skip_before_filter :verify_authenticity_token, :only => [:destroy]
我認爲會的工作,但感覺就像一個黑客對我因爲設計就是這樣一個很好用的寶石,我不能成爲唯一的人誰是這樣做。如果我需要這樣做,我會認爲我在做別的事情。
有沒有人遇到過這個問題?自從升級到Rails 4.0(Running Devise 3.2.2)以來,我只遇到過這個問題。我沒有Rails 3.2(Running Devise〜> 3.1.0)的這個問題。
我主要是試圖避免我的用戶在嘗試從無人蔘與的會話中註銷時看到Server 500錯誤,並且正在尋找處理它的「正確」方式。有任何想法嗎?
我很欣賞的反饋。就我而言,我並未提交表單。我只是調用方法類型DELETE的鏈接。我想我可以把它切換到一個表格,但這是很多開銷。從你鏈接的文章我試圖切換我的application_controller.rb使用'protect_from_forgery::null_session'而不是':exception'。也許這將解決我的問題,不知道我通過做出這樣的改變而放棄了安全。 –
理論上,它不應該是一個安全問題變爲:null_session,但它主要用於API調用。你應該試試看,因爲這是一個非常令人失望的例外。 – sissy
爲了解決這個問題,將其更改爲:null_session不再導致它拋出真實性標記異常。 –