Skip to content

Commit 28f8914

Browse files
author
Taishi Kasuga
committed
Fix a force ssl redirection bug that occur when session store disabled.
1 parent 6cd6586 commit 28f8914

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
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 respond_to?(:flash) && request.respond_to?(:flash)
9393
redirect_to secure_url, options.slice(*REDIRECT_OPTIONS)
9494
end
9595
end

actionpack/test/controller/force_ssl_test.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,22 @@ def cheeseburger
9292
end
9393
end
9494

95+
class RedirectToSSLIfSessionStoreDisabled < ForceSSLController
96+
def banana
97+
request.class_eval do
98+
alias_method :flash_origin, :flash
99+
undef_method :flash
100+
end
101+
102+
force_ssl_redirect || render(plain: "monkey")
103+
ensure
104+
request.class_eval do
105+
alias_method :flash, :flash_origin
106+
undef_method :flash_origin
107+
end
108+
end
109+
end
110+
95111
class ForceSSLControllerLevelTest < ActionController::TestCase
96112
def test_banana_redirects_to_https
97113
get :banana
@@ -321,6 +337,14 @@ def test_cheeseburgers_does_not_redirect_if_already_https
321337
end
322338
end
323339

340+
class RedirectToSSLIfSessionStoreDisabledTest < ActionController::TestCase
341+
def test_banana_redirects_to_https_if_not_https_and_session_store_disabled
342+
get :banana
343+
assert_response 301
344+
assert_equal "https://test.host/redirect_to_ssl_if_session_store_disabled/banana", redirect_to_url
345+
end
346+
end
347+
324348
class ForceSSLControllerLevelTest < ActionController::TestCase
325349
def test_no_redirect_websocket_ssl_request
326350
request.env["rack.url_scheme"] = "wss"

0 commit comments

Comments
 (0)