我通常在我的API控制器中写skip_before_action :verify_authenticity_token
,但我发现还有protect_from_forgery except :action
选项。有什么区别,何时应该使用哪一个?
[查看protect_from_forgery
的代码,它是verify_authenticity_token
和verify_same_origin_request
的包装。
def protect_from_forgery(options = {})
options = options.reverse_merge(prepend: false)
self.forgery_protection_strategy = protection_method_class(options[:with] || :null_session)
self.request_forgery_protection_token ||= :authenticity_token
before_action :verify_authenticity_token, options
append_after_action :verify_same_origin_request
end
我对the docs的了解是,您使用protect_from_forgery
在ApplicationController中打开CSRF,并使用skip_before_action :verify_authenticity_token
在子类中有选择地将其关闭。