El restablecimiento de contraseña es un flujo de autenticación imprescindible en las aplicaciones web. Los starter kits lo construyen automáticamente; con proyectos solo de API o con UI propia, hay que implementarlo manualmente.Cuándo hace falta implementarlo manualmente:
Backend solo de API (frontend SPA o app móvil)
Cuando construyes la UI de autenticación sin usar un starter kit
Cuando quieres personalizar totalmente el correo o el diseño de la URL
Si creaste el proyecto con un starter kit (laravel new), la funcionalidad ya está implementada. Esta página explica cómo hacerlo sin starter kit.
Es el driver por defecto. Guarda los tokens en la tabla password_reset_tokens. Esa tabla la incluye la migración por defecto (0001_01_01_000000_create_users_table.php).
Es una opción disponible desde Laravel 11. No necesita la tabla, por lo que la configuración es más sencilla.
El driver cache guarda los tokens en el almacén de caché. Como se usa el correo como clave, evita usar el correo del usuario como clave de caché en otras partes de la app.
Para usar el restablecimiento, el modelo App\Models\User necesita dos traits.
<?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 — Necesario para enviar notificaciones por correo
CanResetPassword — Aporta métodos para generar y validar el token de restablecimiento
El modelo User por defecto de Laravel ya incluye estos traits. En una instalación nueva no hay que añadir nada.
Para personalizar el correo, sobreescribe sendPasswordResetNotification en el modelo User.
use App\Notifications\ResetPasswordNotification;class User extends Authenticatable{ use Notifiable, CanResetPassword; /** * Envía la notificación de restablecimiento */ public function sendPasswordResetNotification($token): void { $url = 'https://example.com/reset-password?token='.$token; $this->notify(new ResetPasswordNotification($url)); }}
Los enlaces se generan a partir de la cabecera Host de la solicitud HTTP. Para evitar solicitudes con hosts falsos, configura Trusted Hosts en bootstrap/app.php.