Laravel Legacy Bridge es un paquete de Chris Keller (chr15k) pensado para migraciones graduales a Laravel. Cuando un proyecto se migra ruta por ruta, los usuarios pueden estar autenticados en la aplicación antigua mientras las rutas de Laravel los tratan como anónimos. El paquete cierra esa brecha: en peticiones no autenticadas, lee la cookie de sesión legacy, recupera la fila correspondiente en la base de datos legacy, decodifica el payload y llama a loginUsingId() en Laravel para el usuario correspondiente. Una vez que Laravel escribe su propia sesión, el middleware deja de consultar el almacenamiento legacy.

Se instala con composer require chr15k/laravel-legacy-bridge y luego php artisan legacy-bridge:install. El comando de instalación es interactivo, incluye presets para frameworks legacy comunes, solicita las credenciales de la base de datos y escribe las entradas necesarias en .env. También incluye el comando php artisan legacy-bridge:verify, opcionalmente con --session-id, para probar la configuración contra la base de datos legacy real sin autenticar a nadie.

La configuración cubre formatos de payload y resolución de usuario. Soporta el encoding nativo de sesiones PHP, JSON, el formato base64(serialize()) de Laravel y payloads encriptados usando LEGACY_BRIDGE_APP_KEY. El resolver puede ser auto, una clave explícita en notación de punto o una clase personalizada; esta última sirve para mapear IDs de usuario antiguos a nuevos si se rehizo la tabla users. El README recomienda empezar con auto y cambiar a key o custom antes de producción.

En lugar de escribir sus propios logs, el paquete emite eventos tipados: LegacySessionBridged cuando tiene éxito, LegacySessionBridgeFailed para fallos conocidos y LegacySessionBridgeError para excepciones inesperadas. Los fallos incluyen un enum BridgeFailureReason con casos como MissingCookie, AmbiguousCookie, SessionExpired, PayloadDecodeFailed y UserNotResolved, más un DTO BridgeContext con el nombre de la cookie, el session ID, el payload, el user ID y metadatos de la petición.

Las limitaciones actuales: solo sesiones legacy en base de datos, no drivers file, Redis o Memcached; solo peticiones web, no API stateless; y solo el guard de autenticación por defecto. Requiere Laravel 13 y PHP 8.3 o superior. En seguridad, el paquete deserializa payloads leídos de la tabla de sesiones legacy, así que esa base es un límite de confianza y se recomiendan credenciales de solo lectura. La cookie legacy viaja sin encriptar por diseño, por lo que ambas aplicaciones deben usar HTTPS. La estrategia de invalidación por defecto after_write borra la sesión legacy una vez que Laravel escribe la suya; no se debe poner never en producción. Opcionalmente se pueden transportar valores como locale o cart ID desde el payload legacy.