Zum Hauptinhalt springen

Login & Logout

Der Login-Prozess im Detail

  1. Benutzername und Passwort werden an das Symfony Security System gesendet
  2. Der LoginAuthenticator wird aufgerufen. Zuerst supports() und dann authenticate()
  3. Sobald die authenticate() Funktion ein Passport-Object zurückgibt, ruft Symfony die Funktion loadUserByIdentifier() im User-Provider UserService auf. Als Antwort wird ein User-Objekt geliefert.
  4. Symfony validiert das Passwort. Im Erfolgsfall wird die Funktion onAuthenticationSuccess()' ansonsten die Funktion on AuthenticationFailure()` des LoginAuthenticators auf.

Dashboard

config\packages\security.yaml
security:
password_hashers:
App\Model\User:
algorithm: bcrypt
App\Model\Contact:
algorithm: bcrypt

providers:
clubhouse23_user_provider:
id: App\Service\UserService
clubhouse23_apiuser_provider:
id: App\Service\ApiUserService

firewalls:
main:
entry_point: form_login
stateless: false
custom_authenticators:
- App\Security\LoginAuthenticator
provider: clubhouse23_user_provider
access_denied_handler: App\Security\AccessDeniedHandler
form_login:
login_path: clubhouse23
logout:
path: app_logout

Login 2FA

Für die Implementierung der Zwei-Faktor-Authentifizierung nutzen wir diese Bibliothek: https://github.com/RobThree/TwoFactorAuth

Im Login-Authenticator in der Funktion onAuthenticationSuccess ist folgender Code für die Weiterleitung zuständig:

if ($user->hasTwoFA()) {
$token->setAttribute('2fa_passed', 'n');
return new RedirectResponse('/twofalogin');
}

d.h. wenn der Benutzer 2FA aktiviert hat, wird nach /twofalogin weitergeleitet (s. MainController) und das Template für die Aufforderung den 2FA-Code einzugeben wird gerendert.

Die Validierung des 2FA-Codes wird ebenfalls im MainController in der Funktion /twofalogin durchgeführt.

Logout

Der Logout-Prozess im Detail

  1. Der Klick auf die Route app_logout startet den Logout-Prozess
  2. Das Symfony Security System führt den Logout aus und macht eine Weiterleitung zur Route /
  3. Die Klasse LogoutListener verarbeitet den Symfony-Event onLogout

Dashboard

Logout wegen Session Timeout

In der Klasse App\EventProcessing\RequestListener wird der Timeout geprüft. Der Timeout-Wert wird in der Konfiguration (SYSTEM > Konfigurationen) definiert. Der Config-Key heisst app.session_idle_timeout.