Einführung
Das Zurücksetzen von Passwörtern gehört zu den unverzichtbaren Authentifizierungs-Flows einer Webanwendung. Nutzen Sie ein Starter-Kit, wird diese Funktion automatisch aufgebaut. In reinen API-Projekten oder wenn Sie ein eigenes UI aufbauen, ist eine manuelle Umsetzung nötig. Wann eine manuelle Umsetzung nötig ist:- Reines API-Backend (Frontend ist SPA oder Mobile App)
- Sie bauen die Auth-UI selbst, ohne Starter-Kit
- Sie möchten E-Mail-Benachrichtigungen oder Reset-URLs vollständig anpassen
Wenn Sie das Projekt mit einem Starter-Kit erstellt haben (
laravel new), ist die Passwort-Reset-Funktion bereits implementiert. Diese Seite beschreibt die Umsetzung ohne Starter-Kit.Konfiguration
Die Einstellungen für das Zurücksetzen von Passwörtern werden inconfig/auth.php unter dem Schlüssel passwords verwaltet.
driver— Speicherart (databaseodercache)expire— Gültigkeit des Tokens in Minuten. Standard: 60 Minutenthrottle— Wartezeit bis zum nächsten Sendeversuch (in Sekunden)
Treiber
database-Treiber
Der Standardtreiber. Die Reset-Tokens werden in der Datenbanktabelle password_reset_tokens gespeichert. Diese Tabelle ist in der Standardmigration von Laravel (0001_01_01_000000_create_users_table.php) enthalten.
cache-Treiber
Der cache-Treiber speichert Tokens in einem Cache-Store. Die Migration für password_reset_tokens entfällt. Tokens werden unter dem Schlüssel „E-Mail-Adresse des Benutzers“ abgelegt – nutzen Sie daher an anderer Stelle in der App nicht dieselbe E-Mail-Adresse als Cache-Schlüssel.
store einen dedizierten Cache-Store an, verhindern Sie, dass Ihre Reset-Daten durch php artisan cache:clear gelöscht werden. Der Wert muss einem in config/cache.php konfigurierten Store-Namen entsprechen.
Modell vorbereiten
Damit das Zurücksetzen von Passwörtern funktioniert, braucht das ModellApp\Models\User zwei Traits.
Notifiable— nötig, um E-Mail-Benachrichtigungen zu versendenCanResetPassword— stellt Methoden zum Erzeugen und Prüfen von Reset-Tokens bereit
Das Standardmodell
User von Laravel enthält diese Traits bereits. Bei einer Neuinstallation müssen Sie nichts hinzufügen.Routen umsetzen
Das Zurücksetzen von Passwörtern benötigt vier Routen.1. Formular zum Anfordern eines Reset-Links
Zeigt ein Formular an, in dem der Benutzer die E-Mail-Adresse eingibt.2. Versand des Reset-Links verarbeiten
Nimmt das Formular entgegen und versendet mitPassword::sendResetLink() die Reset-E-Mail.
Password::sendResetLink() gibt einen Status-String zurück.
| Status-Konstante | Beschreibung |
|---|---|
Password::ResetLinkSent | Reset-Link wurde gesendet |
Password::INVALID_USER | Kein Benutzer mit dieser E-Mail-Adresse gefunden |
Password::RESET_THROTTLED | Der Versand ist begrenzt (Throttling) |
3. Passwort-Reset-Formular
Zeigt dem Benutzer, der den Link in der E-Mail geklickt hat, ein Formular zur Eingabe eines neuen Passworts an.4. Passwort-Reset ausführen
Nimmt das Formular entgegen und aktualisiert mitPassword::reset() das Passwort.
Password::reset():
| Status-Konstante | Beschreibung |
|---|---|
Password::PasswordReset | Passwort-Reset erfolgreich |
Password::INVALID_TOKEN | Token ungültig oder abgelaufen |
Password::INVALID_USER | Kein Benutzer mit dieser E-Mail-Adresse gefunden |
Token-Gültigkeit
Über die Optionexpire in config/auth.php legen Sie die Gültigkeit des Tokens in Minuten fest. Standard: 60 Minuten.
database-Treiber bleiben abgelaufene Tokens in der Datenbank stehen. Mit folgendem Artisan-Befehl räumen Sie sie regelmäßig auf.
Anpassungen
Eigene Benachrichtigung
Um die Reset-E-Mail anzupassen, überschreiben Sie imUser-Modell die Methode sendPasswordResetNotification.
Reset-Link-URL anpassen
MitResetPassword::createUrlUsing() in der Methode boot des AppServiceProvider ändern Sie die URL des Reset-Links. Nützlich, wenn Sie – etwa bei einem SPA – auf ein anderes Frontend-Origin weiterleiten möchten.
Trusted Hosts konfigurieren
Die Reset-URL wird aus demHost-Header des HTTP-Requests aufgebaut. Um Requests von unerlaubten Hosts zu unterbinden, empfehlen wir die Konfiguration von Trusted Hosts in bootstrap/app.php.
Zusammenfassung
| Ziel | Vorgehen |
|---|---|
| Reset-Link versenden | Password::sendResetLink(['email' => $email]) |
| Passwort zurücksetzen | Password::reset($credentials, $callback) |
| Reset ohne Datenbanktabelle | cache-Treiber konfigurieren |
| Abgelaufene Tokens entfernen | php artisan auth:clear-resets |
| E-Mail-Benachrichtigung anpassen | sendPasswordResetNotification überschreiben |
| Reset-URL anpassen | ResetPassword::createUrlUsing() |
Nächste Schritte
Einführung in Authentifizierung
Verstehen Sie das gesamte Authentifizierungssystem von Laravel.
Notifications
Erfahren Sie mehr zum Anpassen von E-Mail-Benachrichtigungen.