Qué es Fortify
Laravel Fortify es una implementación de backend de autenticación independiente del frontend. Aporta todas las rutas y controladores necesarios para login, registro, restablecimiento de contraseña, verificación de email, 2FA y passkeys.Fortify no tiene UI. Funciona cuando un starter kit o tu propia UI envía peticiones a las rutas de Fortify.
Historia: de Jetstream a los starter kits actuales
Por qué los starter kits actuales siguen usando Fortify
Los starter kits iniciales de React/Vue estaban implementados sin Fortify. Sin embargo, cuando se hizo necesario soportar autenticación de dos factores (2FA), se adoptó Fortify, y toda la autenticación se reorientó hacia esta base. Al estar diseñado como «independiente del frontend», Fortify se combina bien con los starter kits basados en Inertia y hoy sigue en uso.Actualmente Fortify es el paquete oficial de autenticación de Laravel con más recorrido. Desde su aparición en 2020, ha ido cambiando de forma (Jetstream → starter kits actuales) manteniéndose en activo.
Composición del starter kit actual
En los starter kits de React/Vue, Fortify se configura en los siguientes archivos:app/Providers/FortifyServiceProvider.php— registro de vistas, actions y rate limits.config/fortify.php— funcionalidades habilitadas y configuración de autenticación.
Ajustes principales de config/fortify.php
Features::passkeys()) no vienen activadas por defecto. Para habilitarlas, añádelas al array features.
Configuración de FortifyServiceProvider
El FortifyServiceProvider del starter kit cumple tres funciones.
1. Configuración de las actions
app/Actions/Fortify/. Allí se concentran la validación y el hashing.
2. Configuración de las vistas
Features::enabled() y se pasa a la vista.
En una aplicación Blade, en lugar de
Inertia::render(...) se devuelve view('auth.login'). Si cambias de frontend, basta con modificar el FortifyServiceProvider y la lógica de autenticación no cambia.3. Configuración del rate limiting
- Limitador
login: limita por combinación de email + IP (protección contra fuerza bruta). - Limitador
two-factor: limita por el ID de intento de login guardado en la sesión.
RateLimiter::for() claves que coincidan con las de limiters en config/fortify.php.
Funcionalidades principales y rutas registradas
Resumen por funcionalidad de las principales rutas que registra Fortify.| Funcionalidad | Método | Ruta |
|---|---|---|
| Login | GET | /login |
| Login | POST | /login |
| Logout | POST | /logout |
| Registro | GET | /register |
| Registro | POST | /register |
| Solicitud de restablecimiento de contraseña | GET / POST | /forgot-password |
| Restablecimiento de contraseña | GET / POST | /reset-password |
| Verificación de email | GET | /email/verify |
| Reenvío del email de verificación | POST | /email/verification-notification |
| Confirmación de contraseña | GET / POST | /user/confirm-password |
| Activar 2FA | POST | /user/two-factor-authentication |
| Challenge de 2FA | GET / POST | /two-factor-challenge |
| Login con passkey | GET / POST | /passkeys/login |
| Gestión de passkeys | GET / POST / DELETE | /user/passkeys |
php artisan route:list --name=fortify o simplemente con php artisan route:list.
Autenticación de dos factores (2FA)
En el starter kit está habilitadoFeatures::twoFactorAuthentication(). Tanto confirm como confirmPassword están en true.
| Opción | Significado |
|---|---|
confirm | Requiere confirmar con un código de autenticación tras habilitar el 2FA. |
confirmPassword | Pide confirmar la contraseña antes de cambiar la configuración de 2FA. |
Activar 2FA
Envía una petición POST a
/user/two-factor-authentication. Si tiene éxito, se guarda el estado two-factor-authentication-enabled en la sesión.Consultar el código QR
Con una petición GET a
/user/two-factor-qr-code se devuelve el SVG del QR que el usuario escaneará con su app de autenticación.Confirmar con un código
Envía el código con una petición POST a
/user/confirmed-two-factor-authentication y completa la configuración.Passkeys
Los passkeys se han añadido recientemente como una funcionalidad de Fortify. Se trata de una autenticación sin contraseña basada en WebAuthn, compatible con Face ID, Touch ID, Windows Hello y llaves de seguridad hardware.Activación
Añádelo al arrayfeatures de config/fortify.php.
PasskeyUser y el trait PasskeyAuthenticatable al modelo User.
passkeys de config/fortify.php.
Internamente, los passkeys de Fortify envuelven el paquete de Composer
laravel/passkeys. No necesitas publicar el archivo de configuración de laravel/passkeys; la clave passkeys de config/fortify.php tiene prioridad.@laravel/passkeys, helpers de React/Vue/Svelte, etc.), consulta también la investigación inicial de passkeys.
Páginas relacionadas
Guard de autenticación personalizado
Explica cómo crear un guard de autenticación personalizado implementando las interfaces Guard y StatefulGuard.
Documentación oficial: Laravel Fortify
Consulta la documentación oficial para instalación, funcionalidades completas y personalización.