Interne Struktur der Laravel-Authentifizierung
Die Facade Auth und AuthManager
Die Facade Auth ist ein Proxy für Illuminate\Auth\AuthManager. Der AuthManager verwaltet mehrere Guards nach dem Driver-Muster und erzeugt bzw. cacht anhand von config/auth.php die passende Guard-Instanz.
resolve() liest den driver-Key aus dem guards-Array in config/auth.php und ruft die zugehörige Factory-Closure auf. Die eingebauten Treiber session und token sind auf dieselbe Weise registriert.
Unterschied zwischen Guard- und StatefulGuard-Interface
Ein Auth-Guard muss mindestens Illuminate\Contracts\Auth\Guard implementieren. Wenn Sie eine Sitzung aufrechterhalten wollen, implementieren Sie StatefulGuard.
Guard-Interface (Illuminate\Contracts\Auth\Guard)
Guard-Interface (Illuminate\Contracts\Auth\Guard)
StatefulGuard-Interface (Illuminate\Contracts\Auth\StatefulGuard)
StatefulGuard-Interface (Illuminate\Contracts\Auth\StatefulGuard)
StatefulGuard erbt von Guard und ergänzt Methoden zur Sitzungshaltung via Session/Cookies.Für Guards, die keine Session benötigen — z. B. API-Auth oder eigene Tokens —, reicht
Guard. Für Admin-Logins mit Session implementieren Sie StatefulGuard.Eigenen Guard implementieren
Der Trait GuardHelpers
Die Methoden check(), guest(), id(), hasUser() des Guard-Interfaces sind fast immer gleich. Laravel bietet daher den Trait Illuminate\Auth\GuardHelpers. Damit müssen Sie nur user() und validate() implementieren.
Beispiel: API-Token-Guard
In Anlehnung anTokenGuard implementieren wir einen einfachen API-Token-Guard. Er liest das Token aus Header oder Query und löst den Nutzer über UserProvider auf.
1
Guard-Klasse anlegen
Legen Sie die Klasse unter
app/Auth an.2
Guard im Service Provider registrieren
Registrieren Sie den Guard im
boot() des AppServiceProvider per Auth::extend().Auth::createUserProvider() liest providers aus config/auth.php und gibt die passende UserProvider-Instanz zurück. Solange Sie keinen eigenen Provider bauen, erhalten Sie damit den Standard-EloquentUserProvider.3
Guard in config/auth.php konfigurieren
Ergänzen Sie den Guard in
config/auth.php.4
Guard auf Routen anwenden
Übergeben Sie den Guard-Namen an die Im Controller oder Code verwenden Sie den Guard über
auth-Middleware.Auth::guard('api') oder auth('api').Einfache Guards per Closure
MitAuth::viaRequest() definieren Sie einen Guard ohne Klasse — praktisch für Prototypen und sehr einfache Auth.
config/auth.php:
Einen eigenen UserProvider implementieren
Wenn Nutzerinformationen nicht aus der Datenbank stammen (externe API, LDAP …), implementieren Sie Illuminate\Contracts\Auth\UserProvider.
Eigenen UserProvider registrieren
providers-Abschnitt von config/auth.php:
Praktische Anwendungsfälle
Multi-Auth (getrennter Guard für Admins und Nutzer)
1
Admin-Modell erstellen
Legen Sie ein Eloquent-Modell für Administratoren an. Durch Ableiten von
Authenticatable funktioniert es mit dem Auth-System.2
config/auth.php konfigurieren
3
Routen und Middleware definieren
4
Login mit spezifiziertem Guard
Externe API-Authentifizierung per JWT
Beispiel für einen Guard, der einen externen JWT-Auth-Dienst nutzt.AppServiceProvider:
Tests
In Unit-Tests eines eigenen Guards mocken Sie denUserProvider und prüfen das Verhalten.
ActingAs einen Nutzer für einen bestimmten Guard setzen.
Verwandte Seiten
Authentifizierung (Einstieg)
Starter-Kits und Standard-Auth-Flows.
Service Container
Verstehen Sie den Service Container, den die Guard-Registrierung nutzt.