2012-11-02 47 views
0

有些用戶在發佈表單時遇到​​錯誤。偶然的422錯誤:客戶端沒有發送會話cookie?

它發生在少數用戶的一些時間。如果他們稍後再次嘗試他們的請求,它通常會起作用。

真實性標記在每種情況下都會發送。我假設客戶端沒有發送會話cookie與POST(這將解釋爲什麼服務器無法驗證令牌)。爲什麼會這樣?

最後,表單通過javascript($('#new_user')[0].submit())提交,會以某種方式阻止會話cookie被髮送?

不幸的是,禁用verify_authenticity_token before_filter不是一個選項。

+0

好像你的控制器還需要身份驗證令牌。 digg更深 – antiqe

回答

1

我們遇到了這種情況與我們的應用程序之一。我們將會話存儲在memcached中,如果會話從緩存中被逐出或會話過期,則任何後續的post/put/delete都會引發422.我們通過實現之前的過濾器'requires_login'來解決此問題。如果會話已過期,則檢查會話並註銷用戶。然後,我們將應用程序控制器中的protect_from_forgery方法在requires_login之後運行?

E.G

before_filter :requires_login? 

protect_from_forgery 

希望這是有道理

+0

您可以這樣做:protect_from_forgery::reset_session而不是單獨的方法。我們在會話密鑰上執行了reset_session和更長的memcache生命,這似乎阻止了422的普遍應用。 – ryanjones