Login & Logout
Der Login-Prozess im Detail
- Benutzername und Passwort werden an das Symfony Security System gesendet
- Der LoginAuthenticator wird aufgerufen. Zuerst
supports()und dannauthenticate() - Sobald die
authenticate()Funktion ein Passport-Object zurückgibt, ruft Symfony die FunktionloadUserByIdentifier()im User-ProviderUserServiceauf. Als Antwort wird ein User-Objekt geliefert. - Symfony validiert das Passwort. Im Erfolgsfall wird die Funktion
onAuthenticationSuccess()' ansonsten die Funktionon AuthenticationFailure()` des LoginAuthenticators auf.

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
- Der Klick auf die Route
app_logoutstartet den Logout-Prozess - Das Symfony Security System führt den Logout aus und macht eine Weiterleitung zur Route
/ - Die Klasse
LogoutListenerverarbeitet den Symfony-EventonLogout

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.