Skip to main content

De interne structuur van het authenticatiesysteem van Laravel

De Auth-facade en de AuthManager

De Auth-facade is een proxy voor Illuminate\Auth\AuthManager. De AuthManager beheert meerdere guards volgens het driverpatroon en maakt en cachet de juiste guardinstanties op basis van de configuratie in config/auth.php.
resolve() leest de driver-sleutel uit de guards-array in config/auth.php en roept de bijbehorende factory-closure aan. Ook de ingebouwde drivers session en token zijn op deze manier geregistreerd.

Het verschil tussen de interfaces Guard en StatefulGuard

Een authenticatieguard van Laravel moet minimaal Illuminate\Contracts\Auth\Guard implementeren. Moet er een sessie worden bijgehouden, dan implementeer je StatefulGuard.
StatefulGuard erft van Guard en voegt de methodes toe die nodig zijn om de loginstatus via sessies en cookies te bewaren.
Guards die geen sessie nodig hebben, zoals API-authenticatie of eigen tokenauthenticatie, hoeven alleen Guard te implementeren. Is een sessie nodig, zoals bij een beheerderslogin, dan implementeer je StatefulGuard.

Een custom guard implementeren

De GuardHelpers-trait

Omdat check(), guest(), id() en hasUser() van de Guard-interface vrijwel altijd dezelfde implementatie hebben, biedt Laravel de trait Illuminate\Auth\GuardHelpers. Met deze trait beperk je de verplichte implementatie tot twee methodes: user() en validate().

Implementatievoorbeeld: een API-tokenguard

Naar het voorbeeld van het ontwerp van de TokenGuard implementeren we een eenvoudige guard met API-tokenauthenticatie. De guard haalt het token uit de requestheader of queryparameter en resolvet de gebruiker via de UserProvider.
1

De guardklasse aanmaken

Maak de guardklasse aan in de map app/Auth.
2

De guard registreren in een service provider

Registreer de guard met Auth::extend() in de boot()-methode van de AppServiceProvider.
Auth::createUserProvider() leest de providers-configuratie in config/auth.php en geeft de bijbehorende UserProvider-instantie terug. Zolang je geen eigen provider maakt, gebruik je op deze manier de standaard EloquentUserProvider.
3

De guard configureren in config/auth.php

Voeg de nieuwe guard toe aan config/auth.php.
4

De guard toepassen op routes

Geef de guardnaam op bij de auth-middleware.
Om in een controller of andere code een specifieke guard te gebruiken, roep je Auth::guard('api') of auth('api') aan.

Een simpele guard met een closure

Met Auth::viaRequest() kun je zonder klasse, alleen met een closure, een eenvoudige guard definiëren. Geschikt voor prototypes of heel simpele authenticatie.
Configuratie in config/auth.php:
Guards die je definieert met Auth::viaRequest() gebruiken geen UserProvider, waardoor providermethodes zoals retrieveById() niet werken. Voor productie raden we een klassegebaseerde guard via Auth::extend() aan.

Een custom UserProvider implementeren

Wil je gebruikersgegevens uit een andere bron dan de database halen (een externe API, LDAP, enzovoort), dan implementeer je de interface Illuminate\Contracts\Auth\UserProvider.

De custom UserProvider registreren

Voeg hem toe aan de providers-sectie van config/auth.php:
Combineer de guard met de provider:

Praktische use cases

Multi-authenticatie (aparte guards voor beheerders en gewone gebruikers)

1

Het beheerdersmodel aanmaken

Maak een Eloquent-model voor beheerders. Door van Authenticatable te erven, werkt het samen met het Auth-systeem.
2

config/auth.php configureren

3

Routes en middleware instellen

4

De loginverwerking schrijven met een expliciete guard

Externe API-authenticatie met JWT-tokens

Een voorbeeldimplementatie van een custom guard wanneer je een externe JWT-authenticatiedienst gebruikt.
Registratie in de AppServiceProvider:
Je kunt ook methodes aanroepen die specifiek zijn voor je custom guard, zoals Auth::guard('jwt')->payload(). Auth::guard() geeft de guardinstantie zelf terug, dus ook methodes die niet in de interface staan zijn aanroepbaar.

Testen

In unittests van een custom guard mock je de UserProvider om het gedrag van de guard te controleren.
In feature tests met actingAs kun je een gebruiker instellen voor een specifieke guard.

Gerelateerde pagina’s

Authenticatie (introductie)

Bekijk de starter kits en de standaard authenticatieflows.

Service container

Begrijp de werking van de service container die je gebruikt bij het registreren van guards.
Laatst gewijzigd op 6 september 2026