Skip to main content

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.
Flujo general:

Configuración

La configuración vive en la clave passwords de config/auth.php.
  • driver — Almacenamiento (database o cache)
  • expire — Validez del token en minutos. 60 por defecto
  • throttle — 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

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.
Indica un store dedicado con 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 modelo App\Models\User necesita dos traits.
  • 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.

Implementación de las rutas

Se necesitan cuatro rutas.

1. Formulario para solicitar el enlace

Muestra el formulario para introducir el correo.
Vista Blade correspondiente:

2. Envío del enlace

Recibe el formulario y envía el correo con Password::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.
Vista Blade:

4. Ejecución del restablecimiento

Recibe el formulario y actualiza la contraseña con Password::reset().
Constantes de estado de Password::reset():

Vida útil del token

En expire de config/auth.php configuras la validez del token en minutos. Por defecto son 60.
Con el driver database, los tokens caducados permanecen en la BD. Límpialos periódicamente con:
Se recomienda automatizarlo con el scheduler.

Personalización

Notificación personalizada

Para personalizar el correo, sobreescribe sendPasswordResetNotification en el modelo User.

Personalizar la URL del enlace

En el boot 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 cabecera Host de la solicitud HTTP. Para evitar solicitudes con hosts falsos, configura Trusted Hosts en bootstrap/app.php.
Al implementar el restablecimiento, comprueba siempre la configuración de Trusted Hosts. Sin ella hay riesgo de ataques de host header injection.

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.
Última modificación el 13 de julio de 2026