From: Moritz Bunkus Date: Mon, 27 Aug 2012 13:00:48 +0000 (+0200) Subject: Login-Maske: Zu Menu redirecten falls bereits eingeloggt X-Git-Tag: release-3.0.0beta1~271^2~3 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=22efd8a7bcfbeaca36f0f703b3f6bbbe90ff08dc;p=kivitendo-erp.git Login-Maske: Zu Menu redirecten falls bereits eingeloggt Wenn man bereits eingeloggt ist und irgendwo im Programm zu login.pl redirectet wird (z.B. beim Speichern der Benutzereinstellungen), so wurde durch die Umstellung des Loginmechanismusses neulich leider die Loginmaske erneut angezeigt, obwohl eine anständig authentifizierte Session vorliegt. --- diff --git a/SL/Controller/LoginScreen.pm b/SL/Controller/LoginScreen.pm index f561a394b..47dfa90c9 100644 --- a/SL/Controller/LoginScreen.pm +++ b/SL/Controller/LoginScreen.pm @@ -14,6 +14,11 @@ use SL::User; sub action_user_login { my ($self) = @_; + # If the user is already logged in then redirect to the proper menu + # script. + return if $self->_redirect_to_main_script_if_already_logged_in; + + # Otherwise show the login form. $self->render('login_screen/user_login'); } @@ -55,6 +60,27 @@ sub action_login { # Everything is fine. $::auth->set_cookie_environment_variable(); + $self->_redirect_to_main_script($user); +} + +# +# settings +# +sub get_auth_level { + return 'none'; +} + +sub keep_auth_vars_in_form { + return 1; +} + +# +# private methods +# + +sub _redirect_to_main_script { + my ($self, $user) = @_; + return $self->redirect_to($::form->{callback}) if $::form->{callback}; my %style_to_script_map = ( @@ -68,14 +94,25 @@ sub action_login { $self->redirect_to(controller => "menu${menu_script}.pl", action => 'display'); } -# -# settings -# -sub get_auth_level { - return 'none'; -} +sub _redirect_to_main_script_if_already_logged_in { + my ($self) = @_; + + # Get 'login' from valid session. + my $login = $::auth->get_session_value('login'); + return unless $login; + + # See whether or not the user exists in the database. + my %user = $::auth->read_user(login => $login); + return if ($user{login} || '') ne $login; + + # Check if the session is logged in correctly. + return if SL::Auth::OK() != $::auth->authenticate($login, undef); + + $::auth->create_or_refresh_session; + $::auth->delete_session_value('FLASH'); + + $self->_redirect_to_main_script(\%user); -sub keep_auth_vars_in_form { return 1; }