【发布时间】:2014-12-10 20:47:27
【问题描述】:
有没有办法为所有控制器禁用 CSRF,还是必须在每个控制器的基础上禁用它?我只使用 ruby on rails 作为 API,不需要任何类型的 CSRF,因为请求不是基于会话的。我只想禁用 JSON 请求。
我相信这可能有效,但不确定
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery
skip_before_action :verify_authenticity_token, if: :json_request?
#Checks format for json
protected
def json_request?
request.format.json?
end
end
【问题讨论】:
-
这与在单个控制器中禁用它相同,但您应该在 ApplicationController 中执行此操作。
-
@tadman 有没有办法只为 json 请求指定?我是 ruby on rails 的新手,所以学习我的使用方法。
-
设置一个控制器作为所有 API 调用的基础,在此处禁用它,然后从该中间类派生所有 API 控制器。同样的方法适用。使该控制器仅 JSON。这是在 Rails 中最传统的方式。
-
@tadman 我的问题与您标记为重复的问题不同。我想为所有控制器禁用仅 json 请求。另外,上面的代码是功能性答案吗?如果是这样,它与您建议的解决方案相比如何?
-
如果有人有更具体的答案,我会重新打开它,但我认为你所拥有的应该可以完成这项工作。唯一确定的方法是在您的环境中验证它。
标签: ruby-on-rails ruby csrf