]> source.dussan.org Git - redmine.git/commitdiff
Redirect to back_url or referer when clicking "Sign in" while already logged-in ...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 25 Jan 2014 12:35:05 +0000 (12:35 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 25 Jan 2014 12:35:05 +0000 (12:35 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@12705 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/account_controller.rb
app/controllers/application_controller.rb
test/functional/account_controller_test.rb

index a3768d40383f2038546b9570eca407005cb45b5b..034821107b740776226aa50358315f26efb40984 100644 (file)
@@ -34,7 +34,7 @@ class AccountController < ApplicationController
   def login
     if request.get?
       if User.current.logged?
-        redirect_to home_url
+        redirect_back_or_default home_url, :referer => true
       end
     else
       authenticate_user
index 152dc3f181fd4ca5bf976e93e17243afef9fcb17..c4b01ed40f93626bad7312afa0d0e468e481d9ed 100644 (file)
@@ -373,7 +373,7 @@ class ApplicationController < ActionController::Base
     url
   end
 
-  def redirect_back_or_default(default)
+  def redirect_back_or_default(default, options={})
     back_url = params[:back_url].to_s
     if back_url.present?
       begin
@@ -387,6 +387,9 @@ class ApplicationController < ActionController::Base
         logger.warn("Could not redirect to invalid URL #{back_url}")
         # redirect to default
       end
+    elsif options[:referer]
+      redirect_to_referer_or default
+      return
     end
     redirect_to default
     false
index 5423e065b6acfd4b1e1674a1e791bde65b5708c0..738371ab4216f25f828a54c6ace7bd160dc4d4d8 100644 (file)
@@ -33,7 +33,25 @@ class AccountControllerTest < ActionController::TestCase
     assert_select 'input[name=password]'
   end
 
-  def test_get_login_while_logged_in_should_redirect_to_home
+  def test_get_login_while_logged_in_should_redirect_to_back_url_if_present
+    @request.session[:user_id] = 2
+    @request.env["HTTP_REFERER"] = 'http://test.host/issues/show/1'
+
+    get :login, :back_url => 'http://test.host/issues/show/1'
+    assert_redirected_to '/issues/show/1'
+    assert_equal 2, @request.session[:user_id]
+  end
+
+  def test_get_login_while_logged_in_should_redirect_to_referer_without_back_url
+    @request.session[:user_id] = 2
+    @request.env["HTTP_REFERER"] = 'http://test.host/issues/show/1'
+
+    get :login
+    assert_redirected_to '/issues/show/1'
+    assert_equal 2, @request.session[:user_id]
+  end
+
+  def test_get_login_while_logged_in_should_redirect_to_home_by_default
     @request.session[:user_id] = 2
 
     get :login