verify_authenticity_token尚未定义

Pet*_*ter 22 ruby-on-rails ruby-on-rails-5

Ruby版本2.2.4,Rails版本5.0.0.1.

我陷入了测试登录的教程的一部分curl.我收到一个错误

ArgumentError(在process_action回调之前:尚未定义verify_authenticity_token).

我在sessions_controller中使用了这段代码:

skip_before_action :verify_authenticity_token, :if => Proc.new { |c| c.request.format == 'application/json' }
Run Code Online (Sandbox Code Playgroud)

有人知道答案吗?

Dha*_*udi 21

检查您ApplicationController是否接到protect_from_forgery如下电话:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
end
Run Code Online (Sandbox Code Playgroud)

基本上调用protect_from_forgery会添加verify_authenticity_tokenbefore_filter列表中,您可以在其他控制器中跳过该列表.

有关详细信息,请参阅protect_from_forgery文档.


Ban*_*eil 10

升级到Rails 5后,我遇到了这个错误.我发现如果skip_before_action使用相同的方法名称多次调用,则会引发此异常.

我的修复是添加参数raise: false,第二次skip_before_filter被调用.

所以它看起来像这样:

skip_before_action :your_method_name, raise: false
Run Code Online (Sandbox Code Playgroud)


0xt*_*bit 5

升级到 Rails 5 并部署到 Heroku 后,我遇到了这个错误。我无法在开发中重现它。

API 文档中给出了示例

class ApplicationController < ActionController::Base
  protect_from_forgery unless: -> { request.format.json? }
end
Run Code Online (Sandbox Code Playgroud)

对我来说,添加unless: -> { request.format.json? }上面的内容修复了我的堆栈炸弹。raise: false不幸的是没有。