偶尔422错误:客户端没有发送会话cookie?

时间:2012-11-02 03:30:35

标签: ruby-on-rails

一些用户在发布表单时收到422 ActionController::InvalidAuthenticityToken错误。

有些时候会发生在少数用户身上。如果他们稍后再次尝试他们的请求,它通常会有效。

在每种情况下都会发送真实性令牌。我假设客户端没有发送会话cookie和POST(这可以解释为什么服务器无法验证令牌)。为什么会这样?

最后,表单是通过javascript($('#new_user')[0].submit())提交的,是否会以某种方式阻止会话cookie的发送?

遗憾的是,禁用verify_authenticity_token before_filter是一种选择。

1 个答案:

答案 0 :(得分:1)

我们使用其中一个应用程序遇到了这种情况。我们将会话存储在memcached中,如果会话被从缓存中逐出,或者会话到期,任何后续的post / put / delete都会引发422.我们通过实现一个前置过滤器'requires_login?'来解决这个问题。检查会话并在会话过期时注销用户。然后,我们将应用程序控制器中的protect_from_forgery方法移到requires_login?

之后运行

E.G

before_filter :requires_login?

protect_from_forgery

希望这是有道理的