Settings — Seguridad¶
En esta sección puedes reforzar la seguridad de tu cuenta activando la autenticación en dos pasos (2FA) con códigos temporales (TOTP) y administrar las sesiones abiertas en tus dispositivos.
La pantalla está implementada en resources/js/pages/settings/security.tsx y requiere Laravel Fortify.
Requisitos previos¶
- Estar autenticado.
- Fortify instalado y configurado (rutas
/user/two-factor-*). - Rate limiter para
two-factor(evita fuerza bruta de TOTP).
Autenticación en dos pasos (TOTP)¶
La verificación en dos pasos añade un código extra (TOTP) generado por una app como Google Authenticator o Authy. Este código cambia cada 30s.
Habilitar 2FA¶
- Abre
Ajustes→Seguridad. - Pulsa
Habilitar 2FA. - Pulsa
Mostrar código QRy escanéalo con tu app TOTP. - Ingresa el código de 6 dígitos en el Input OTP y pulsa
Confirmar 2FA. - Verás una insignia
2FA activacon la fecha de confirmación.
Input OTP
La pantalla usa un input de tipo OTP con 6 casillas. Puedes pegar los 6 dígitos y el componente los distribuirá automáticamente.
Códigos de recuperación¶
Al habilitar 2FA se generan códigos de recuperación de un solo uso para cuando no tengas acceso a tu app TOTP.
- Botón
Ver códigos de recuperación. - Acciones disponibles:
Copiaral portapapeles.Descargarcomo archivo de texto con nombreappName-recovery-codes-YYYY-MM-DD.txt.Regenerar códigos(requiere confirmación). Los anteriores quedan invalidados.
Guárdalos en lugar seguro
Los códigos de recuperación son tu respaldo para entrar si pierdes tu teléfono. Consérvalos en tu gestor de contraseñas.
Deshabilitar 2FA¶
- Pulsa
Deshabilitar 2FAy confirma. Por seguridad, se te pedirá la contraseña antes de completar la acción.
Sesiones activas¶
En esta sección ves todas las sesiones abiertas con tu cuenta, agrupadas por IP + dispositivo/navegador.
- Cada fila muestra:
- Icono del dispositivo (desktop o mobile) derivado del
User-Agent. - IP de la sesión.
- Ubicación aproximada (GeoIP) con un pin.
- Fecha/hora de última actividad.
- Icono del dispositivo (desktop o mobile) derivado del
- Acciones disponibles:
Refrescarla lista.Cerraruna sesión específica (no la actual).Cerrar todas (excepto esta)con confirmación y verificación de contraseña.
Privacidad y precisión
Para IPs privadas (por ejemplo 192.168.x.y) se muestra "Red privada" o "Localhost". La ubicación aproximada se cachea en localStorage para evitar llamadas repetidas.
Manejo de límites (429)¶
Si haces demasiadas peticiones (por ejemplo, QR/códigos seguidos), el sistema puede responder con 429 Too Many Requests.
- Verás un contador de enfriamiento indicando en cuántos segundos puedes reintentar.
- La UI evita envíos mientras el contador está activo.
Solución de problemas¶
- 2FA no funciona o las políticas devuelven 403:
- Verifica que
AuthServiceProviderestá registrado enbootstrap/providers.php(Laravel 11/12 requiere registro explícito para cargar policies).
- Verifica que
- El login de un usuario inactivo muestra el mensaje estándar y no el personalizado:
- En este boilerplate,
FortifyServiceProviderpersonaliza el flujo para devolverauth.inactivecuando el usuario existe pero está inactivo.
- En este boilerplate,
- La ubicación no aparece:
- Puede deberse a CORS del proveedor GeoIP o a que la IP es privada. Se muestra
Ubicación desconocidade forma segura.
- Puede deberse a CORS del proveedor GeoIP o a que la IP es privada. Se muestra
Accesibilidad y UX¶
- Componentes y botones con
focus-visibleyaria-labeldonde procede. - Insignias de estado:
Inactiva,Pendiente de confirmación,2FA activa. - Diálogos de confirmación para acciones destructivas (
Deshabilitar 2FA,Regenerar códigos,Cerrar todas).
Referencias¶
- Frontend:
resources/js/pages/settings/security.tsx - Controladores:
app/Http/Controllers/Settings/SecurityController.php,app/Http/Controllers/Settings/SessionsBrowserController.php - Fortify:
app/Providers/FortifyServiceProvider.php - Rate limiting:
app/Providers/AppServiceProvider.php