diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2015-04-09 14:12:49 -0300 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2015-04-09 14:12:49 -0300 |
commit | d215620340be7cb29e2aa87aab22da5ec9e6e6a7 (patch) | |
tree | ae8a01086d98a67677b7af438823a393c3f3fb66 /actionpack | |
parent | bbbbfe1ac02162ecb5e9a7b560134a3221f129f3 (diff) | |
parent | 242c5c7ae4b9dbc1558ee9d673335f2b1e209188 (diff) | |
download | rails-d215620340be7cb29e2aa87aab22da5ec9e6e6a7.tar.gz rails-d215620340be7cb29e2aa87aab22da5ec9e6e6a7.tar.bz2 rails-d215620340be7cb29e2aa87aab22da5ec9e6e6a7.zip |
Merge pull request #19682 from supercaracal/fix_force_ssl_redirection_flash_error
Fix fails to force_ssl_redirection if session_store is disabled
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_controller/metal/force_ssl.rb | 2 | ||||
-rw-r--r-- | actionpack/lib/action_controller/test_case.rb | 7 | ||||
-rw-r--r-- | actionpack/test/controller/force_ssl_test.rb | 25 |
3 files changed, 31 insertions, 3 deletions
diff --git a/actionpack/lib/action_controller/metal/force_ssl.rb b/actionpack/lib/action_controller/metal/force_ssl.rb index d920668184..5a8c7db162 100644 --- a/actionpack/lib/action_controller/metal/force_ssl.rb +++ b/actionpack/lib/action_controller/metal/force_ssl.rb @@ -89,7 +89,7 @@ module ActionController end secure_url = ActionDispatch::Http::URL.url_for(options.slice(*URL_OPTIONS)) - flash.keep if respond_to?(:flash) + flash.keep if request.respond_to?(:flash) redirect_to secure_url, options.slice(*REDIRECT_OPTIONS) end end diff --git a/actionpack/lib/action_controller/test_case.rb b/actionpack/lib/action_controller/test_case.rb index 33c24999f9..6ffd7a7d2b 100644 --- a/actionpack/lib/action_controller/test_case.rb +++ b/actionpack/lib/action_controller/test_case.rb @@ -659,7 +659,9 @@ module ActionController @request.assign_parameters(@routes, controller_class_name, action.to_s, parameters) @request.session.update(session) if session - @request.flash.update(flash || {}) + + is_request_flash_enabled = @request.respond_to?(:flash) + @request.flash.update(flash || {}) if is_request_flash_enabled if xhr @request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest' @@ -685,7 +687,8 @@ module ActionController @assigns = @controller.respond_to?(:view_assigns) ? @controller.view_assigns : {} - if flash_value = @request.flash.to_session_value + flash_value = is_request_flash_enabled ? @request.flash.to_session_value : nil + if flash_value @request.session['flash'] = flash_value else @request.session.delete('flash') diff --git a/actionpack/test/controller/force_ssl_test.rb b/actionpack/test/controller/force_ssl_test.rb index 04222745d9..a1bb1cee58 100644 --- a/actionpack/test/controller/force_ssl_test.rb +++ b/actionpack/test/controller/force_ssl_test.rb @@ -321,4 +321,29 @@ class RedirectToSSLTest < ActionController::TestCase assert_response 200 assert_equal 'ihaz', response.body end + + def test_banana_redirects_to_https_if_not_https_and_flash_middleware_is_disabled + disable_flash + get :banana + assert_response 301 + assert_equal 'https://test.host/redirect_to_ssl/banana', redirect_to_url + ensure + enable_flash + end + + private + + def disable_flash + ActionDispatch::TestRequest.class_eval do + alias_method :flash_origin, :flash + undef_method :flash + end + end + + def enable_flash + ActionDispatch::TestRequest.class_eval do + alias_method :flash, :flash_origin + undef_method :flash_origin + end + end end |