Inicio de sesión sin contraseña con soporte de segundo factor de Fortify en Laravel
La nota presenta un paquete de Laravel que añade autenticación sin contraseña mediante magic links y códigos de un solo uso, con un traspaso a Fortify para los flujos de doble factor.
Merece la pena leerlo si trabajas en la UX de acceso o en seguridad, sobre todo porque el paquete intenta evitar que los escáneres de correo consuman los enlaces antes que el usuario.
Email Magic Link for Laravel es un paquete de autenticación sin contraseña que permite a los usuarios iniciar sesión mediante enlaces enviados por correo electrónico o códigos de un solo uso. El paquete funciona de forma independiente o junto con Laravel Fortify y no requiere dependencias adicionales más allá del framework en sí.
El paquete resuelve un problema de seguridad crítico en los sistemas de magic links tradicionales: los escáneres de correo y dispositivos de seguridad suelen recuperar URLs automáticamente antes de que los usuarios las vean, consumiendo tokens de uso único sin intención. Email Magic Link lo resuelve dividiendo el flujo en dos pasos: la solicitud GET solo muestra una página de confirmación, mientras que el token se consume únicamente mediante un POST explícito desde esa página, que los escáneres no pueden activar. Los tokens y códigos se almacenan solo como valores hash (HMAC-SHA256 con clave), nunca en texto plano, con protección contra fuerza bruta individual por token (máximo 5 intentos por defecto) y consumo seguro sin condiciones de carrera.
Cuando los usuarios tienen autenticación de dos factores habilitada a través de Fortify, la verificación del magic link no los autentica automáticamente. En su lugar, se redirigen al desafío de dos factores de Fortify como usuarios no autenticados, lo que evita escenarios de evasión. Para clientes SPA y móviles, las respuestas JSON indican si los usuarios necesitan verificación de dos factores o están completamente autenticados.
Los desarrolladores pueden emitir enlaces y códigos de forma programática sin enviarlos automáticamente, permitiendo entrega personalizada a través de SMS, notificaciones push o mailables personalizados mediante la fachada EmailMagicLink. El paquete incluye una ResendGuard para prevenir abusos, con tiempos de espera escalonados (30 segundos, 60 segundos, 120 segundos) y un límite móvil de cinco intentos por hora. Un comando programado limpia automáticamente los tokens expirados diariamente.
El paquete requiere PHP 8.4 y Laravel 13, siendo Fortify opcional. La instalación se realiza mediante `composer require pushery/email-magic-link-for-laravel`, seguido del comando de instalación y migraciones de base de datos.
Tribuna de lectores
Aún no hay aportaciones — abre el debate.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
Esperando tu clic …
·