Skip to main content

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.
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 an TokenGuard 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 auth-Middleware.
Im Controller oder Code verwenden Sie den Guard über Auth::guard('api') oder auth('api').

Einfache Guards per Closure

Mit Auth::viaRequest() definieren Sie einen Guard ohne Klasse — praktisch für Prototypen und sehr einfache Auth.
Konfiguration in config/auth.php:
Ein per Auth::viaRequest() definierter Guard nutzt keinen UserProvider; Provider-Methoden wie retrieveById() funktionieren nicht. Für Produktion empfehlen wir klassenbasierte Guards per Auth::extend().

Einen eigenen UserProvider implementieren

Wenn Nutzerinformationen nicht aus der Datenbank stammen (externe API, LDAP …), implementieren Sie Illuminate\Contracts\Auth\UserProvider.

Eigenen UserProvider registrieren

Ergänzung im providers-Abschnitt von config/auth.php:
Kombinieren von Guard und Provider:

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.
Registrierung im AppServiceProvider:
Sie können auch guard-spezifische Methoden nutzen: Auth::guard('jwt')->payload(). Auth::guard() liefert die Guard-Instanz selbst — daher sind auch Methoden außerhalb des Interfaces erreichbar.

Tests

In Unit-Tests eines eigenen Guards mocken Sie den UserProvider und prüfen das Verhalten.
In Feature-Tests können Sie per 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.
Zuletzt geändert am 13. Juli 2026