Skip to content

Commit c688b07

Browse files
committed
Merge pull request rails#19682 from supercaracal/fix_force_ssl_redirection_flash_error
Fix fails to force_ssl_redirection if session_store is disabled
1 parent ea2d242 commit c688b07

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

actionpack/lib/action_controller/metal/force_ssl.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def force_ssl_redirect(host_or_options = nil)
8989
end
9090

9191
secure_url = ActionDispatch::Http::URL.url_for(options.slice(*URL_OPTIONS))
92-
flash.keep if respond_to?(:flash)
92+
flash.keep if request.respond_to?(:flash)
9393
redirect_to secure_url, options.slice(*REDIRECT_OPTIONS)
9494
end
9595
end

actionpack/lib/action_controller/test_case.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -619,7 +619,9 @@ def process(action, http_method = 'GET', *args)
619619
@request.assign_parameters(@routes, controller_class_name, action.to_s, parameters)
620620

621621
@request.session.update(session) if session
622-
@request.flash.update(flash || {})
622+
623+
is_request_flash_enabled = @request.respond_to?(:flash)
624+
@request.flash.update(flash || {}) if is_request_flash_enabled
623625

624626
@controller.request = @request
625627
@controller.response = @response
@@ -640,7 +642,8 @@ def process(action, http_method = 'GET', *args)
640642

641643
@assigns = @controller.respond_to?(:view_assigns) ? @controller.view_assigns : {}
642644

643-
if flash_value = @request.flash.to_session_value
645+
flash_value = is_request_flash_enabled ? @request.flash.to_session_value : nil
646+
if flash_value
644647
@request.session['flash'] = flash_value
645648
end
646649

actionpack/test/controller/force_ssl_test.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,4 +321,29 @@ def test_banana_does_not_redirect_if_already_https
321321
assert_response 200
322322
assert_equal 'ihaz', response.body
323323
end
324+
325+
def test_banana_redirects_to_https_if_not_https_and_flash_middleware_is_disabled
326+
disable_flash
327+
get :banana
328+
assert_response 301
329+
assert_equal 'https://test.host/redirect_to_ssl/banana', redirect_to_url
330+
ensure
331+
enable_flash
332+
end
333+
334+
private
335+
336+
def disable_flash
337+
ActionDispatch::TestRequest.class_eval do
338+
alias_method :flash_origin, :flash
339+
undef_method :flash
340+
end
341+
end
342+
343+
def enable_flash
344+
ActionDispatch::TestRequest.class_eval do
345+
alias_method :flash, :flash_origin
346+
undef_method :flash_origin
347+
end
348+
end
324349
end

0 commit comments

Comments
 (0)