一些用户在发布表单时收到422 ActionController::InvalidAuthenticityToken
错误。
有些时候会发生在少数用户身上。如果他们稍后再次尝试他们的请求,它通常会有效。
在每种情况下都会发送真实性令牌。我假设客户端没有发送会话cookie和POST(这可以解释为什么服务器无法验证令牌)。为什么会这样?
最后,表单是通过javascript($('#new_user')[0].submit()
)提交的,是否会以某种方式阻止会话cookie的发送?
遗憾的是,禁用verify_authenticity_token
before_filter是一种选择。
答案 0 :(得分:1)
我们使用其中一个应用程序遇到了这种情况。我们将会话存储在memcached中,如果会话被从缓存中逐出,或者会话到期,任何后续的post / put / delete都会引发422.我们通过实现一个前置过滤器'requires_login?'来解决这个问题。检查会话并在会话过期时注销用户。然后,我们将应用程序控制器中的protect_from_forgery方法移到requires_login?
之后运行E.G
before_filter :requires_login?
protect_from_forgery
希望这是有道理的