summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/sessions_controller.rb2
-rw-r--r--changelogs/unreleased/29669-redirect-referer-params.yml4
-rw-r--r--spec/controllers/sessions_controller_spec.rb16
3 files changed, 21 insertions, 1 deletions
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index 7d81c96262f..d8561871098 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -79,7 +79,7 @@ class SessionsController < Devise::SessionsController
if request.referer.present? && (params['redirect_to_referer'] == 'yes')
referer_uri = URI(request.referer)
if referer_uri.host == Gitlab.config.gitlab.host
- referer_uri.path
+ referer_uri.request_uri
else
request.fullpath
end
diff --git a/changelogs/unreleased/29669-redirect-referer-params.yml b/changelogs/unreleased/29669-redirect-referer-params.yml
new file mode 100644
index 00000000000..d8fc7f33049
--- /dev/null
+++ b/changelogs/unreleased/29669-redirect-referer-params.yml
@@ -0,0 +1,4 @@
+---
+title: Fix redirection after login when the referer have params
+merge_request:
+author: mhasbini
diff --git a/spec/controllers/sessions_controller_spec.rb b/spec/controllers/sessions_controller_spec.rb
index a06c29dd91a..9c16a7bc08b 100644
--- a/spec/controllers/sessions_controller_spec.rb
+++ b/spec/controllers/sessions_controller_spec.rb
@@ -211,4 +211,20 @@ describe SessionsController do
end
end
end
+
+ describe '#new' do
+ before do
+ @request.env['devise.mapping'] = Devise.mappings[:user]
+ end
+
+ it 'redirects correctly for referer on same host with params' do
+ search_path = '/search?search=seed_project'
+ allow(controller.request).to receive(:referer).
+ and_return('http://%{host}%{path}' % { host: Gitlab.config.gitlab.host, path: search_path })
+
+ get(:new, redirect_to_referer: :yes)
+
+ expect(controller.stored_location_for(:redirect)).to eq(search_path)
+ end
+ end
end