提交 73b944ec 编写于 作者: L Lisa Ugray

Add ActionController::Base.skip_forgery_protection

Since we now default to `protect_from_forgery with: :exception`,
provide a wrapper to `skip_before_action :verify_authenticity_token`
for disabling forgery protection.
上级 ec4a8369
......@@ -132,6 +132,15 @@ def protect_from_forgery(options = {})
append_after_action :verify_same_origin_request
end
# Turn off request forgery protection. This is a wrapper for:
#
# skip_before_action :verify_authenticity_token
#
# See +skip_before_action+ for allowed options.
def skip_forgery_protection(options = {})
skip_before_action :verify_authenticity_token, options
end
private
def protection_method_class(name)
......
......@@ -163,6 +163,13 @@ def post_two
end
end
class SkipProtectionController < ActionController::Base
include RequestForgeryProtectionActions
protect_from_forgery with: :exception
skip_forgery_protection if: :skip_requested
attr_accessor :skip_requested
end
# common test methods
module RequestForgeryProtectionTests
def setup
......@@ -964,3 +971,26 @@ def assert_matches_session_token_on_server(form_token, method = "post")
assert_equal expected, actual
end
end
class SkipProtectionControllerTest < ActionController::TestCase
def test_should_not_allow_post_without_token_when_not_skipping
@controller.skip_requested = false
assert_blocked { post :index }
end
def test_should_allow_post_without_token_when_skipping
@controller.skip_requested = true
assert_not_blocked { post :index }
end
def assert_blocked
assert_raises(ActionController::InvalidAuthenticityToken) do
yield
end
end
def assert_not_blocked
assert_nothing_raised { yield }
assert_response :success
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册