我的Rails应用程序中的随机ActionController :: InvalidAuthenticityToken

时间:2019-07-04 07:46:22

标签: ruby-on-rails csrf

使用ActionController::InvalidAuthenticityToken的应用程序上存在随机CSRF错误。例如,每100个请求中有1个或更多。为什么这些错误会像这样随机出现?

我在常规的<%= form_with %>标签上放置了它们,在javascript帖子上放置了它们(但这在大多数情况下都有效,因为我每次都将meta[name='csrf-token']添加为X-CSRF-TOKEN),有些则放在{ {1}}等...

为什么有时而不是每次都会发生?

致谢

1 个答案:

答案 0 :(得分:2)

Rails会话到期时,CSRF令牌将到期(某些配置除外)。

以下是引发此错误的情况:

如果用户在页面上显示了表单,请离开几十分钟(取决于会话持续时间),然后重新填写表单,则会话(和令牌)可能已过期。然后,在提交时,Rails将引发InvalidAuthenticityToken错误。

有关此内容的更多信息,Rails CSRF Tokens - Do they expire?

另一种情况涉及(坏)机器人:机器人可以不使用令牌就提交表单。