Autenticación y sesiones
Modelo
Full Vuelos tiene su propia tabla de usuarios (vuelos_users) y su propia cookie de sesión (fv_sesion, firmada, válida 14 días y limitada a /practica-vuelos). No hay relación con las cuentas del campus Full Advanced:
- Iniciar sesión en el campus no abre Full Vuelos, y viceversa.
- Cerrar sesión en Full Vuelos no cierra la sesión del campus.
- No hay rol de backoffice: todos los usuarios son viajeros (decisión de producto, igual que Full Bazar).
Registro público
POST /practica-vuelos/registro crea una cuenta y abre sesión de inmediato, redirigiendo a la página principal con el aviso de bienvenida. Si el inventario de vuelos existe, la cuenta recibe las mismas dos reservas de ejemplo que viajero.demo (seed_example_bookings): una ida y vuelta BOG ↔ BAQ cancelable (tarifa Plus + maleta documentada + selección de asiento, ~5 días) y un solo-trayecto BOG → MDE dentro de la ventana de check-in. Vuelos agotados o inventario ausente simplemente omiten la reserva correspondiente — el registro nunca falla por esto.
| Regla | Mensaje |
|---|---|
| Todos los campos obligatorios | Todos los campos son obligatorios. |
| Contraseña de mínimo 8 caracteres | La contraseña debe tener al menos 8 caracteres. |
| Usuario único | El nombre de usuario ya está registrado. |
| Correo único | El correo electrónico ya está registrado. |
Las contraseñas se almacenan con hash Argon2id.
Login
POST /practica-vuelos/login. Cualquier fallo (usuario inexistente, contraseña errada, cuenta desactivada) responde 401 con el mismo mensaje genérico Usuario o contraseña inválidos. — nunca se revela cuál parte falló.
El parámetro next redirige tras el login, pero solo a rutas locales de /practica-vuelos; cualquier otro valor cae a la página principal (anti open-redirect).
Páginas protegidas
Requieren sesión de Full Vuelos: el flujo de reserva (/reservar*), Mis reservas, el detalle de reserva, cancelación y check-in. Un visitante anónimo es redirigido (303) al login con ?next= apuntando a su destino original, query string incluida — la búsqueda y el manual son públicos.