Rails 6 CSRF 令牌过期问题

问题描述 投票:0回答:2

我们在生产环境中遇到表单提交问题。 该标准似乎异常罕见,我无法复制该问题。

CSRF 令牌已创建并验证良好。

时机

问题似乎仅当用户在提交表单前等待超过 2 小时时才会出现,但这样做我们也无法重现。 日志

W, [2022-07-14T15:19:37.535241 #2433]  WARN -- : Can't verify CSRF token authenticity.
I, [2022-07-14T15:19:37.535556 #2433]  INFO -- : Completed 422 Unprocessable Entity in 1ms (ActiveRecord: 0.0ms | Allocations: 291)
F, [2022-07-14T15:19:37.536425 #2433] FATAL -- :   
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):

系统配置

Rails 版本 6.1.6 Ruby 版本 2.7.4

ruby-on-rails ruby csrf csrf-token
2个回答
0
投票

检查 session_store.rb 的初始化程序

在里面你可能会发现已经设置了expire_after:

Rails.application.config.session_store :cookie_store,
                                       key: '_myapp_session_',
                                       expire_after: 30.minutes

0
投票

该问题是由于

rails-ujs
在某些情况下未能在远程表单提交的同时插入 CSRF 令牌而导致的。

我无法确定根本原因,但升级到 Rails 7 和 Turbo 解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.