Rails 5.2 某些控制器操作给出 InvalidAuthenticityToken

Rails 5.2 some controller actions gives InvalidAuthenticityToken

之前我使用了 gem,它提供了一个控制器来接受外部服务,以便 POST 一些数据进入我们的应用程序。但是在 Rails 5.2 中它停止工作了。当端点被触发时,它会引发 ActionController::InvalidAuthenticityToken 错误。

对于5.2之前的Rails,生成的ApplicationController会调用protect_from_forgery,意思是POST,PUT,DELETE动作都经过真实性检查

新 Rails 5.2 项目将 by default check authenticity token for any subclass of ActionController::Base 相反,这会影响许多现有的 Gem。

您可以等待 gem 与 5.2 兼容的更新。

或者,您可以在初始化程序中猴子修补这些控制器:

require 'foo_controller'
class FooController < ActionController::Base
  skip_before_action :verify_authenticity_token, raise: false
end

我 运行 也在这个问题中使用 destroy_user_session_path 退出 link。我比较了我的旧应用程序 (rails 5.1.x) 与这个新建的 rails 5.2.0,我注意到我的布局标签中没有 csrf_meta_tags .

添加后

= csrf_meta_tags

成功了! HTH

ruby '2.3.5' gem 'rails', '~> 5.2.0'