Skip to main content

Structure interne du système d’authentification Laravel

La façade Auth et AuthManager

La façade Auth est un proxy vers Illuminate\Auth\AuthManager. AuthManager gère plusieurs guards suivant un pattern de driver et instancie/cache l’instance de guard appropriée en se basant sur la configuration de config/auth.php.
resolve() lit la clé driver dans le tableau guards de config/auth.php et invoque la closure de fabrique correspondante. Les drivers intégrés session et token sont enregistrés selon le même mécanisme.

Différence entre les interfaces Guard et StatefulGuard

Un guard d’authentification Laravel doit au minimum implémenter Illuminate\Contracts\Auth\Guard. S’il doit maintenir une session, il implémente StatefulGuard.
StatefulGuard hérite de Guard et ajoute les méthodes nécessaires pour maintenir l’état de connexion via session ou cookies.
Pour un guard qui n’a pas besoin de session (authentification API, token personnalisé, etc.), il suffit d’implémenter Guard. Si vous avez besoin de session (par exemple une connexion administrateur), implémentez StatefulGuard.

Implémentation d’un guard personnalisé

Le trait GuardHelpers

Comme les méthodes check(), guest(), id(), hasUser() de l’interface Guard ont presque toujours la même implémentation, Laravel fournit le trait Illuminate\Auth\GuardHelpers. En l’utilisant, vous pouvez limiter les méthodes obligatoires à user() et validate().

Exemple d’implémentation d’un guard d’authentification par token API

En s’inspirant de la conception de TokenGuard, nous implémentons un guard d’authentification par token API simple. Il récupère le token depuis un en-tête de requête ou un paramètre de requête, puis résout l’utilisateur via un UserProvider.
1

Créer la classe de guard

Créez la classe de guard dans le répertoire app/Auth.
2

Enregistrer le guard dans un service provider

Enregistrez le guard avec Auth::extend() dans la méthode boot() de AppServiceProvider.
Auth::createUserProvider() lit la configuration providers de config/auth.php et retourne l’instance de UserProvider correspondante. Sauf si vous créez un provider personnalisé, cet appel vous permet d’utiliser le EloquentUserProvider standard.
3

Configurer le guard dans config/auth.php

Ajoutez le nouveau guard dans config/auth.php.
4

Appliquer le guard aux routes

Spécifiez le nom du guard dans le middleware auth.
Pour utiliser un guard spécifique dans un contrôleur ou du code, appelez Auth::guard('api') ou auth('api').

Guard simplifié via une closure

Avec Auth::viaRequest(), vous pouvez définir un guard simple avec juste une closure, sans créer de classe. Utile pour prototyper ou pour des authentifications très simples.
Configuration dans config/auth.php :
Les guards définis via Auth::viaRequest() n’utilisent pas de UserProvider, donc les méthodes du provider comme retrieveById() ne fonctionneront pas. En production, il est recommandé d’utiliser un guard basé sur une classe avec Auth::extend().

Implémentation d’un UserProvider personnalisé

Pour récupérer les informations utilisateur depuis une source autre que la base de données (API externe, LDAP, etc.), implémentez l’interface Illuminate\Contracts\Auth\UserProvider.

Enregistrement du UserProvider personnalisé

Ajoutez dans la section providers de config/auth.php :
Combinez guard et provider :

Cas d’usage pratiques

Authentification multiple (guards séparés pour administrateurs et utilisateurs)

1

Créer le modèle Admin

Préparez un modèle Eloquent pour les administrateurs. Hériter de Authenticatable permet l’intégration avec le système Auth.
2

Configurer config/auth.php

3

Configurer les routes et middlewares

4

Écrire le processus de connexion en spécifiant le guard

Authentification API externe via token JWT

Exemple d’implémentation d’un guard personnalisé utilisant un service JWT externe.
Enregistrement dans AppServiceProvider :
Vous pouvez accéder à des méthodes propres au guard personnalisé comme Auth::guard('jwt')->payload(). Auth::guard() renvoie l’instance du guard elle-même, donc les méthodes hors interface sont également invocables.

Tests

Pour les tests unitaires d’un guard personnalisé, moquez le UserProvider pour vérifier le comportement du guard.
Pour les tests fonctionnels avec ActingAs, vous pouvez définir un utilisateur sur un guard spécifique.

Pages associées

Authentification (introduction)

Vérifiez les starter kits et les flux d’authentification standards.

Conteneur de services

Comprenez le fonctionnement du conteneur de services utilisé lors de l’enregistrement d’un guard.
Dernière modification le 13 juillet 2026