Introducción
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.Configuración
La configuración vive en la clavepasswords de config/auth.php.
driver— Almacenamiento (databaseocache)expire— Validez del token en minutos. 60 por defectothrottle— Tiempo (segundos) hasta permitir un reenvío
Drivers
Driver database
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).
Driver cache
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.
store para que php artisan cache:clear no borre los tokens. El valor corresponde a un store definido en config/cache.php.
Preparación del modelo
Para usar el restablecimiento, el modeloApp\Models\User necesita dos traits.
Notifiable— Necesario para enviar notificaciones por correoCanResetPassword— 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.Implementación de las rutas
Se necesitan cuatro rutas.1. Formulario para solicitar el enlace
Muestra el formulario para introducir el correo.2. Envío del enlace
Recibe el formulario y envía el correo conPassword::sendResetLink().
Password::sendResetLink() devuelve un string con el estado.
3. Formulario de restablecimiento
Al pulsar el enlace del correo se muestra el formulario para introducir la nueva contraseña.4. Ejecución del restablecimiento
Recibe el formulario y actualiza la contraseña conPassword::reset().
Password::reset():
Vida útil del token
Enexpire de config/auth.php configuras la validez del token en minutos. Por defecto son 60.
database, los tokens caducados permanecen en la BD. Límpialos periódicamente con:
Personalización
Notificación personalizada
Para personalizar el correo, sobreescribesendPasswordResetNotification en el modelo User.
Personalizar la URL del enlace
En elboot de AppServiceProvider, usa ResetPassword::createUrlUsing() para cambiar la URL del enlace. Útil si tu frontend (SPA) está en otro origen.
Trusted Hosts
Los enlaces se generan a partir de la cabeceraHost de la solicitud HTTP. Para evitar solicitudes con hosts falsos, configura Trusted Hosts en bootstrap/app.php.
Resumen
Próximos pasos
Introducción a la autenticación
Aprende el sistema de autenticación completo de Laravel.
Notificaciones
Personalización de notificaciones por correo.