La réinitialisation du mot de passe est un flux d’authentification indispensable. Les kits de démarrage la construisent automatiquement, mais pour un projet API uniquement ou une UI personnalisée, il faut l’implémenter manuellement.Quand implémenter manuellement :
Backend d’API seulement (frontend SPA ou application mobile)
Construction d’une UI d’authentification sans kit de démarrage
Personnalisation complète des e-mails et de l’URL de réinitialisation
Si vous avez créé votre projet avec un kit de démarrage (laravel new), la réinitialisation du mot de passe est déjà en place. Cette page explique l’implémentation sans kit.
Driver par défaut. Il stocke les tokens dans la table password_reset_tokens. Cette table fait partie de la migration par défaut (0001_01_01_000000_create_users_table.php).
Option nouvelle disponible depuis Laravel 11. Elle ne nécessite pas de table dédiée, ce qui simplifie la configuration.
Le driver cache stocke les tokens dans le cache. Aucune migration de table n’est requise. Comme la clé de cache est l’e-mail de l’utilisateur, veillez à ne pas réutiliser cette clé ailleurs dans l’application.
Spécifier un store dédié évite que php artisan cache:clear n’efface les données de reset. La valeur doit correspondre à un store défini dans config/cache.php.
<?phpnamespace App\Models;use Illuminate\Auth\Passwords\CanResetPassword;use Illuminate\Foundation\Auth\User as Authenticatable;use Illuminate\Notifications\Notifiable;class User extends Authenticatable{ use Notifiable, CanResetPassword; // ...}
Notifiable — nécessaire pour envoyer des notifications par e-mail
CanResetPassword — fournit les méthodes de génération et de vérification des tokens
Le modèle User par défaut inclut déjà ces traits. Aucune action supplémentaire n’est requise sur une installation neuve.
Redéfinissez sendPasswordResetNotification sur le modèle User pour personnaliser l’e-mail.
use App\Notifications\ResetPasswordNotification;class User extends Authenticatable{ use Notifiable, CanResetPassword; /** * Envoie la notification de réinitialisation. */ public function sendPasswordResetNotification($token): void { $url = 'https://example.com/reset-password?token='.$token; $this->notify(new ResetPasswordNotification($url)); }}
Dans boot de AppServiceProvider, utilisez ResetPassword::createUrlUsing() pour changer l’URL. Utile pour rediriger vers une SPA hébergée sur une autre origine.
use App\Models\User;use Illuminate\Auth\Notifications\ResetPassword;public function boot(): void{ ResetPassword::createUrlUsing(function (User $user, string $token) { return 'https://example.com/reset-password?token='.$token; });}
Le lien de réinitialisation est généré à partir de l’en-tête Host de la requête HTTP. Pour éviter les requêtes provenant d’hôtes malveillants, configurez les Trusted Hosts dans bootstrap/app.php.
Vérifiez toujours la configuration Trusted Hosts en implémentant la réinitialisation, sous peine d’être exposé aux attaques par injection d’en-tête Host.