Redirect to back_url or referer when clicking "Sign in" while already logged-in (#15926).

git-svn-id: http://svn.redmine.org/redmine/trunk@12705 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2014-01-25 12:35:05 +00:00
parent 5faa1a4e6e
commit a2f869b43e
3 changed files with 24 additions and 3 deletions

View File

@ -34,7 +34,7 @@ class AccountController < ApplicationController
def login def login
if request.get? if request.get?
if User.current.logged? if User.current.logged?
redirect_to home_url redirect_back_or_default home_url, :referer => true
end end
else else
authenticate_user authenticate_user

View File

@ -373,7 +373,7 @@ class ApplicationController < ActionController::Base
url url
end end
def redirect_back_or_default(default) def redirect_back_or_default(default, options={})
back_url = params[:back_url].to_s back_url = params[:back_url].to_s
if back_url.present? if back_url.present?
begin begin
@ -387,6 +387,9 @@ class ApplicationController < ActionController::Base
logger.warn("Could not redirect to invalid URL #{back_url}") logger.warn("Could not redirect to invalid URL #{back_url}")
# redirect to default # redirect to default
end end
elsif options[:referer]
redirect_to_referer_or default
return
end end
redirect_to default redirect_to default
false false

View File

@ -33,7 +33,25 @@ class AccountControllerTest < ActionController::TestCase
assert_select 'input[name=password]' assert_select 'input[name=password]'
end 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 @request.session[:user_id] = 2
get :login get :login