Ruby on rails Rails部署导致出现“峰值”;Can';t验证CSRF令牌的真实性”;

Ruby on rails Rails部署导致出现“峰值”;Can';t验证CSRF令牌的真实性”;,ruby-on-rails,csrf,Ruby On Rails,Csrf,这是从部署到Datica(基于Docker)的Rails 4应用程序(反过来又从Rails 3应用程序迁移)迁移而来的Rails 5.1 web应用程序 每次部署后,我们的日志记录“无法验证CSRF令牌真实性”警告和相应401状态出现的峰值。前端是React应用程序,大多数客户机-服务器通信通过XHR进行,因此有些人会多次收到401。刷新浏览器两次解决了我的401状态问题,因此我认为峰值下降表明人们正在刷新或停止使用该应用程序,因为它对他们不起作用(参见显示峰值的日志图截图) 该应用程序使用co

这是从部署到Datica(基于Docker)的Rails 4应用程序(反过来又从Rails 3应用程序迁移)迁移而来的Rails 5.1 web应用程序

每次部署后,我们的日志记录“无法验证CSRF令牌真实性”警告和相应401状态出现的峰值。前端是React应用程序,大多数客户机-服务器通信通过XHR进行,因此有些人会多次收到401。刷新浏览器两次解决了我的401状态问题,因此我认为峰值下降表明人们正在刷新或停止使用该应用程序,因为它对他们不起作用(参见显示峰值的日志图截图)

该应用程序使用cookies进行会话存储。CSRF令牌首次加载时位于页面主体中。我所观察到的情况可以解释为cookies获得了一个新的CSRF令牌,因此页面主体中的CSRF令牌与会话中的CSRF令牌不匹配,但我不理解是什么导致服务器在部署后发出一个新的CSRF令牌

考虑到这可能是由于新启动的实例接收
Origin
头的延迟,或者旧实例停止接收,我在application.rb中设置了
config.action\u controller.forgery\u protection\u Origin\u check=false
。然而,在昨晚和今早部署之后出现了峰值(而且这也没什么意义,因为刷新浏览器似乎可以解决问题)

关于部署如何导致服务器向会话发出新的CSRF令牌,您有什么想法吗?或者任何其他想法或其他假设

谢谢大家!


问题是从未设置过
MyApp::Application.config.secret\u key\u base
。当应用程序从Rails 3迁移到Rails 4时,建议等到用户群完全位于Rails 4之后再取消对该行的注释。但这从未发生过


我假设,如果未设置该密钥库,它会自动生成一个内存密钥库,用于生成CSRF令牌,从而在每次部署时生成一个新的密钥库。

问题是,
MyApp::Application.config.secret\u key\u base
从未设置。当应用程序从Rails 3迁移到Rails 4时,建议等到用户群完全位于Rails 4之后再取消对该行的注释。但这从未发生过

我假设,如果未设置secret_key_base,它会自动生成一个内存中的key base,用于生成CSRF令牌,从而在每次部署时生成一个新的key base