X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FLoginScreen.pm;h=47dfa90c9b7c135a93b419454e6f992b114141da;hb=5e45f456a6790d3ecdf358edf76b3679a5cacd05;hp=f561a394b23faa56a5561be405c168f085f0b2b8;hpb=469ca9fc3cac624073270fc3217766dbb7aba253;p=kivitendo-erp.git 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; }