Rails 6 - Heroku 上的 InvalidAuthenticityToken

Tal*_*boy 6 ruby ruby-on-rails heroku ruby-on-rails-6

到目前为止,我还没有看到任何答案,如果不建议禁用它(我不想这样做),就不会回答这个问题。

在本地,一切正常,但部署到 Heroku 上的生产环境中,我得到了InvalidAuthenticityToken.

从我所看到的一切来看,一切都设置正确。

  • 全新应用程序已打开Rails 6.0.3.1(因此不会迁移默认设置可能被禁用的位置)
  • RAILS_MASTER_KEY在 Heroku 中设置会话
  • session_store.rb设置Rails.application.config.session_store :cookie_store, key: '__app_session', expire_after: 1.year
  • csrf_meta_tags在我的布局以及csp_meta_tag
  • 没有使用ajax,这是一个普通的form_with. 我可以在开发工具中看到 CSRF 标记,所以我知道它位于 HTML 中

我认为这可能是因为ApplicationController

before_action :authenticate
Run Code Online (Sandbox Code Playgroud)

然而,似乎prepend: true不再在应用程序控制器中设置......

无论如何,我尝试通过添加它来覆盖它(即使默认情况下它不存在,并且如果我将其添加到行上方,它仍然不起作用before_action

protect_from_forgery with: :exception, prepend: true
Run Code Online (Sandbox Code Playgroud)

编辑我还要说修复了 Sidekiq在尝试发出 DELETE 命令时显示禁止的问题(终止作业按钮)

小智 5

尝试添加config.force_ssl = true您的config/environments/production.rb并确保您的 SSL 配置正确,就像您所说的切换到FullSSL 而不是Flexible.