Rails 5.2一些控制器动作给出了InvalidAuthenticityToken

时间:2018-02-13 08:08:20

标签: csrf ruby-on-rails-5.2

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

2 个答案:

答案 0 :(得分:4)

对于5.2之前的Rails,生成的ApplicationController将调用protect_from_forgery,这意味着会检查POST,PUT,DELETE操作的真实性。

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

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

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

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

答案 1 :(得分:1)

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

添加

= csrf_meta_tags

它工作了! HTH

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