在rails 3中关闭CSRF令牌

Sim*_*ico 98 csrf ruby-on-rails-3

我有一个rails应用程序,为i​​Phone应用程序提供一些api.我希望能够简单地在资源上发布,而无需考虑获取正确的csrf令牌.我尝试了一些我在stackoverflow中看到的方法,但似乎它们不再适用于rails 3.感谢您帮助我.

Mik*_*wis 167

在要禁用CSRF的控制器中,检查:

skip_before_action :verify_authenticity_token
Run Code Online (Sandbox Code Playgroud)

或者除了几个方法之外的所有内容都禁用它:

skip_before_action :verify_authenticity_token, :except => [:update, :create]
Run Code Online (Sandbox Code Playgroud)

或者仅禁用指定的方法:

skip_before_action :verify_authenticity_token, :only => [:custom_auth, :update]
Run Code Online (Sandbox Code Playgroud)

更多信息:RoR请求伪造保护

  • 这是混合了常规浏览器可访问表单和 API 端点的应用程序的正确答案。如果您绝对确定您的应用程序中不会有任何浏览器可访问的表单,那么 Markus Proske 的答案将是正确的。 (2认同)

Mar*_*ske 105

在Rails3中,您可以在控制器中禁用特定方法的csrf标记:

protect_from_forgery :except => :create 
Run Code Online (Sandbox Code Playgroud)

  • 对于任何阅读的人,请注意这应该是`ApplicationController`.Mike Lewis在下面的回复(`skip_before_filter:verify_authenticity_token`)是如何在每个控制器的基础上禁用它,假设控制器继承自`ApplicationController`. (12认同)

jas*_*328 31

使用Rails 4,您现在可以选择写入skip_before_action而不是skip_before_filter.

# Works in Rails 4 and 5
skip_before_action :verify_authenticity_token
Run Code Online (Sandbox Code Playgroud)

要么

# Works in Rails 3 and 4 (deprecated in Rails 4 and removed in Rails 5)
skip_before_filter :verify_authenticity_token
Run Code Online (Sandbox Code Playgroud)

  • 如果我没记错的话,不推荐使用过滤器 (5认同)