Skip to main content

Inleiding

Wachtwoordherstel is een onmisbare authenticatieflow in webapplicaties. Als je een starter kit gebruikt, wordt deze functionaliteit automatisch opgezet, maar bij API-only projecten of projecten met een eigen UI is handmatige implementatie nodig. Gevallen waarin handmatige implementatie nodig is:
  • Een API-only backend (de frontend is een SPA of mobiele app)
  • Wanneer je de authenticatie-UI zelf bouwt zonder starter kit
  • Wanneer je de e-mailnotificatie of het ontwerp van de herstel-URL volledig wilt aanpassen
Heb je je project aangemaakt met een starter kit (laravel new), dan is de wachtwoordherstelfunctionaliteit al geïmplementeerd. Deze pagina legt uit hoe je het implementeert zonder starter kit.
De volledige flow van wachtwoordherstel ziet er zo uit:

Configuratie

De configuratie van wachtwoordherstel beheer je via de sleutel passwords in config/auth.php.
  • driver — opslagmethode (database of cache)
  • expire — geldigheidsduur van het token (minuten). Standaard 60 minuten
  • throttle — wachttijd (seconden) voordat opnieuw verzenden is toegestaan

Drivers

De database-driver

De standaarddriver. Wachtwoordhersteltokens worden opgeslagen in de databasetabel password_reset_tokens. Deze tabel is opgenomen in de standaardmigratie van Laravel (0001_01_01_000000_create_users_table.php).

De cache-driver

Een nieuwe optie die beschikbaar is vanaf Laravel 11. Omdat er geen databasetabel nodig is, kun je wachtwoordherstel met een eenvoudigere opzet implementeren.
De cache-driver slaat tokens op in de cachestore. De migratie voor de tabel password_reset_tokens is dan niet meer nodig. Tokens worden opgeslagen met het e-mailadres van de gebruiker als sleutel, dus let erop dat je elders in je app geen e-mailadressen als cachesleutel gebruikt.
Als je bij de sleutel store een aparte cachestore opgeeft, voorkom je dat de hersteldata wordt gewist bij php artisan cache:clear. De opgegeven waarde moet overeenkomen met een storenaam die in config/cache.php is geconfigureerd.

Het model voorbereiden

Om wachtwoordherstel te gebruiken heeft het model App\Models\User twee traits nodig.
  • Notifiable — nodig om e-mailnotificaties te versturen
  • CanResetPassword — biedt de methodes die nodig zijn om wachtwoordhersteltokens te genereren en te valideren
Het standaard User-model van Laravel bevat deze traits al. Bij een nieuwe installatie hoef je niets toe te voegen.

De routes implementeren

Voor wachtwoordherstel zijn vier routes nodig. Toont een formulier waarin het e-mailadres wordt ingevoerd.
De bijbehorende Blade-view:
Verwerkt de formulierinzending en verstuurt de herstelmail met Password::sendResetLink().
Password::sendResetLink() geeft een statusstring terug.

3. Het wachtwoordherstelformulier

Toont een formulier waarin de gebruiker die op de link in de e-mail heeft geklikt een nieuw wachtwoord invoert.
De bijbehorende Blade-view:

4. Het wachtwoordherstel uitvoeren

Verwerkt het formulier en werkt het wachtwoord bij met Password::reset().
De statusconstanten van Password::reset():

Geldigheidsduur van tokens

Met de optie expire in config/auth.php stel je de geldigheidsduur van tokens in minuten in. De standaard is 60 minuten.
Bij gebruik van de database-driver blijven verlopen tokens in de database staan. Gebruik het volgende Artisan-commando om ze periodiek op te ruimen.
Het is aan te raden dit te automatiseren met de scheduler.

Aanpassen

Een eigen notificatie gebruiken

Om de wachtwoordherstelmail aan te passen, override je de methode sendPasswordResetNotification in het User-model.
Met ResetPassword::createUrlUsing() in de boot-methode van de AppServiceProvider kun je de URL van de herstellink wijzigen. Handig als je wilt doorverwijzen naar een frontend op een andere origin, zoals een SPA.

Trusted hosts instellen

De wachtwoordherstellink wordt gegenereerd op basis van de Host-header van het HTTP-verzoek. Om verzoeken van ongeldige hosts te weren, wordt aanbevolen trusted hosts in te stellen in bootstrap/app.php.
Controleer bij het implementeren van wachtwoordherstel altijd de trusted hosts-configuratie. Bij een onvoldoende configuratie loop je risico op host header injection-aanvallen.

Samenvatting

Volgende stappen

Introductie authenticatie

Leer hoe het volledige authenticatiesysteem van Laravel werkt.

Notificaties

Leer in detail hoe je e-mailnotificaties aanpast.
Laatst gewijzigd op 6 september 2026