Rails中的protect_from_forgery和verify_authenticity_token有什么区别?
What's the difference between protect_from_forgery and verify_authenticity_token in Rails?
我通常在我的 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
在子类中有选择地关闭它。
我通常在我的 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
在子类中有选择地关闭它。