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'
之前我使用了 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'