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.Configuratie
De configuratie van wachtwoordherstel beheer je via de sleutelpasswords in config/auth.php.
driver— opslagmethode (databaseofcache)expire— geldigheidsduur van het token (minuten). Standaard 60 minutenthrottle— wachttijd (seconden) voordat opnieuw verzenden is toegestaan
Drivers
De database-driver
De standaarddriver. Wachtwoordhersteltokens worden opgeslagen in de databasetabelpassword_reset_tokens. Deze tabel is opgenomen in de standaardmigratie van Laravel (0001_01_01_000000_create_users_table.php).
De cache-driver
Decache-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.
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 modelApp\Models\User twee traits nodig.
Notifiable— nodig om e-mailnotificaties te versturenCanResetPassword— 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.1. Formulier om een herstellink aan te vragen
Toont een formulier waarin het e-mailadres wordt ingevoerd.2. De herstellink versturen
Verwerkt de formulierinzending en verstuurt de herstelmail metPassword::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.4. Het wachtwoordherstel uitvoeren
Verwerkt het formulier en werkt het wachtwoord bij metPassword::reset().
Password::reset():
Geldigheidsduur van tokens
Met de optieexpire in config/auth.php stel je de geldigheidsduur van tokens in minuten in. De standaard is 60 minuten.
database-driver blijven verlopen tokens in de database staan. Gebruik het volgende Artisan-commando om ze periodiek op te ruimen.
Aanpassen
Een eigen notificatie gebruiken
Om de wachtwoordherstelmail aan te passen, override je de methodesendPasswordResetNotification in het User-model.
De URL van de herstellink aanpassen
MetResetPassword::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 deHost-header van het HTTP-verzoek. Om verzoeken van ongeldige hosts te weren, wordt aanbevolen trusted hosts in te stellen in bootstrap/app.php.
Samenvatting
Volgende stappen
Introductie authenticatie
Leer hoe het volledige authenticatiesysteem van Laravel werkt.
Notificaties
Leer in detail hoe je e-mailnotificaties aanpast.