Commit ab6b7dd95df37edce19a4e615068c1d87a8c4496

Authored by Daniela Feitosa
Committed by Antonio Terceiro
1 parent c5c14f9a

ActionItem1203: where to go after login/logout

  * after login: the same place the user was before
  * after logout: the site root (/)
app/controllers/public/account_controller.rb
... ... @@ -17,6 +17,7 @@ class AccountController < ApplicationController
17 17 def login
18 18 @user = User.new
19 19 @person = @user.build_person
  20 + store_location(request.referer)
20 21 return unless request.post?
21 22 self.current_user = User.authenticate(params[:user][:login], params[:user][:password]) if params[:user]
22 23 if logged_in?
... ... @@ -24,8 +25,10 @@ class AccountController < ApplicationController
24 25 self.current_user.remember_me
25 26 cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at }
26 27 end
27   - go_to_user_initial_page if redirect?
28   - flash[:notice] = _("Logged in successfully") if redirect?
  28 + if redirect?
  29 + go_to_initial_page
  30 + flash[:notice] = _("Logged in successfully")
  31 + end
29 32 else
30 33 flash[:notice] = _('Incorrect username or password') if redirect?
31 34 redirect_to :back if redirect?
... ... @@ -70,7 +73,7 @@ class AccountController < ApplicationController
70 73 redirect_to :controller => 'search', :action => 'assets', :asset => 'communities', :wizard => true
71 74 return
72 75 else
73   - go_to_user_initial_page if redirect?
  76 + go_to_initial_page if redirect?
74 77 end
75 78 end
76 79 if @wizard
... ... @@ -105,7 +108,7 @@ class AccountController < ApplicationController
105 108 cookies.delete :auth_token
106 109 reset_session
107 110 flash[:notice] = _("You have been logged out.")
108   - redirect_back_or_default(:controller => 'account', :action => 'index')
  111 + redirect_to :controller => 'home', :action => 'index'
109 112 end
110 113  
111 114 def change_password
... ... @@ -280,12 +283,11 @@ class AccountController < ApplicationController
280 283 params[:answer] == enterprise.send(enterprise.question).to_s
281 284 end
282 285  
283   - def go_to_user_initial_page
  286 + def go_to_initial_page
284 287 if environment == current_user.environment
285 288 redirect_back_or_default(user.admin_url)
286 289 else
287 290 redirect_back_or_default(:controller => 'home')
288 291 end
289 292 end
290   -
291 293 end
... ...
test/functional/account_controller_test.rb
... ... @@ -33,21 +33,24 @@ class AccountControllerTest < Test::Unit::TestCase
33 33 assert_response :redirect
34 34 end
35 35  
36   - should 'redirect to user control panel on login' do
  36 + should 'redirect to where user was on login' do
  37 + @request.env["HTTP_REFERER"] = '/bli'
37 38 u = new_user
38 39 post :login, :user => {:login => 'quire', :password => 'quire'}
39 40  
40   - assert_redirected_to :controller => 'profile_editor', :action => 'index', :profile => 'quire'
  41 + assert_redirected_to '/bli'
41 42 end
42 43  
43   - should 'redirect to home when login on other environment' do
  44 + should 'redirect to where was when login on other environment' do
44 45 e = Environment.create!(:name => 'other_environment')
45 46 e.domains << Domain.new(:name => 'other.environment')
46 47 e.save!
47 48 u = create_user('test_user', :environment => e).person
  49 +
  50 + @request.env["HTTP_REFERER"] = '/bli'
48 51 post :login, :user => {:login => 'test_user', :password => 'test_user'}
49 52  
50   - assert_redirected_to :controller => 'home'
  53 + assert_redirected_to '/bli'
51 54 end
52 55  
53 56 def test_should_fail_login_and_not_redirect
... ... @@ -120,6 +123,7 @@ class AccountControllerTest &lt; Test::Unit::TestCase
120 123 end
121 124  
122 125 def test_should_remember_me
  126 + @request.env["HTTP_REFERER"] = '/bli'
123 127 post :login, :user => {:login => 'johndoe', :password => 'test'}, :remember_me => "1"
124 128 assert_not_nil @response.cookies["auth_token"]
125 129 end
... ... @@ -284,12 +288,6 @@ class AccountControllerTest &lt; Test::Unit::TestCase
284 288 end
285 289 end
286 290  
287   - should 'correct redirect after login' do
288   - user = create_user('correct_redirect').person
289   - post :login, :user => {:login => 'correct_redirect', :password => 'correct_redirect'}
290   - assert_redirected_to :controller => 'profile_editor'
291   - end
292   -
293 291 should 'signup from wizard' do
294 292 assert_difference User, :count do
295 293 post :signup, :user => { :login => 'mylogin', :password => 'mypassword', :password_confirmation => 'mypassword', :email => 'mylogin@example.com' }, :wizard => true
... ... @@ -644,6 +642,13 @@ class AccountControllerTest &lt; Test::Unit::TestCase
644 642 assert_equal 'example.com', Person['testuser'].organization
645 643 end
646 644  
  645 + should 'redirect to initial page after logout' do
  646 + login_as :johndoe
  647 + get :logout
  648 + assert_nil session[:user]
  649 + assert_redirected_to :controller => 'home', :action => 'index'
  650 + end
  651 +
647 652 protected
648 653 def new_user(options = {}, extra_options ={})
649 654 data = {:profile_data => person_data}
... ...