0

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

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

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

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

不幸的是,禁用verify_authenticity_tokenbefore_filter 不是一个选项。

4

1 回答 1

1

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

例如

before_filter :requires_login?

protect_from_forgery

希望这是有道理的

于 2012-11-15T15:34:56.717 回答