Nivel: N4 – CCO / Desarrollo
Instructivo completo del sistema de autenticacion del ERP: registro, login, recuperacion de contrasena, login social (Google), sesiones y seguridad. Tecnologia: Supabase Auth.
El ERP ofrece dos formas de entrar. Ambas crean la misma cuenta en Supabase Auth y el mismo perfil en public.profiles:
Metodo
Como funciona
Para quien
Ventaja
Email + Contrasena
El usuario escribe su correo y crea una contrasena
Cualquiera
No depende de terceros. Funciona con cualquier correo
Google (Social Login)
Un clic en «Continuar con Google». Se autentica con su cuenta Gmail
Cualquiera con Gmail
Sin contrasena. Mas rapido. Foto de perfil automatica
IMPORTANTE: Si un usuario se registra con Google y luego intenta entrar con email/contrasena (o viceversa) usando el mismo correo, Supabase los unifica automaticamente. No se crean cuentas duplicadas.
⚠️ REGLA CRITICA: Un menor de edad (<18 anos) NO puede crear su propia cuenta. La cuenta la crea y administra su representante legal (padre, madre o tutor). El menor NO debe usar el correo del padre como su cuenta principal.
3.1 El problema que se resuelve
Historicamente, los padres creaban la cuenta del alumno usando su propio correo y datos. Esto causaba:
Problema
Consecuencia
La cuenta esta a nombre del padre, no del alumno
Los certificados INAC salen con datos incorrectos
El email es del padre
Las notificaciones llegan al padre, no al alumno
El padre crea multiples cuentas para varios hijos
Identidades cruzadas. Imposible saber quien es quien
El alumno cumple 18 y quiere «su» cuenta
No puede porque la identidad esta vinculada al padre
3.2 Como funciona el registro de un menor
Paso
Que pasa
Detalle
1
El representante se registra primero
Crea su propia cuenta con sus datos reales (cedula, email, nombre)
2
Desde su perfil, clic en «Agregar representado»
Formulario especial para registrar al menor
3
Llena datos del menor
Nombre, apellido, cedula del menor, fecha de nacimiento. Email del menor (si tiene) o se genera uno temporal
4
Se crea la cuenta del menor
profiles: datos del menor. user_representantes: vincula menor ↔ representante
5
El representante administra la cuenta
Puede ver notas, pagar cuotas, subir documentos del menor. El menor accede con sus propias credenciales (si tiene edad suficiente)
6
Al cumplir 18: emancipacion de cuenta
El sistema notifica. El alumno confirma su email propio. La cuenta pasa a ser 100% del alumno. El representante queda como contacto
3.3 Tabla: user_representantes
Columna
Tipo
Descripcion
id
uuid (PK)
ID del registro
menor_id
uuid (FK → profiles)
El alumno menor de edad
representante_id
uuid (FK → profiles)
El padre/madre/tutor (tiene su propia cuenta)
parentesco
varchar(50)
‘padre’, ‘madre’, ‘tutor_legal’, ‘otro’
es_responsable_financiero
boolean
Si este representante paga las cuotas del menor
puede_ver_notas
boolean
Si puede acceder al historial academico
puede_autorizar_vuelos
boolean
Para autorizaciones de vuelo especificas de CIA
activo
boolean
Se desactiva cuando el menor cumple 18
fecha_emancipacion
date
Fecha en que el menor asumio control total (null si no)
PRINCIPIO: 1 persona = 1 cuenta. Siempre. El padre tiene SU cuenta, el hijo tiene SU cuenta. Se vinculan con la tabla user_representantes. Nunca se comparten credenciales.
4. Flujo de login con Google (Social Login)
Paso
Que ve el usuario
Que pasa por detras
1
Clic en «Continuar con Google»
Se abre ventana emergente de Google
2
Selecciona su cuenta Gmail
Google autentica y devuelve token + datos del perfil
3
Redireccion automatica al ERP
Supabase recibe el token, crea/vincula la cuenta
4
Dashboard («Mi Panel»)
Si es primera vez: trigger crea profiles + tour de bienvenida
Supabase devuelve JWT token + refresh token. Se guarda en cookie httpOnly
3b
Si es incorrecto → Error
«Email o contrasena incorrectos» (no revelar cual fallo)
3c
Si la cuenta esta suspendida
«Tu cuenta ha sido suspendida. Contacta a soporte» + enlace
6. Recuperacion de contrasena
Paso
Que ve
Que pasa
1
Clic «Olvidaste tu contrasena?»
Abre pantalla de recuperacion
2
Ingresa su email
supabase.auth.resetPasswordForEmail(email)
3
«Te enviamos un enlace a tu correo»
Supabase envia email con link magico (expira en 1 hora)
4
Abre el link → pantalla «Nueva contrasena»
Formulario con contrasena + confirmar + indicador de fortaleza
5
«Contrasena actualizada» → redirige a login
supabase.auth.updateUser({ password })
NOTA: Si el usuario se registro con Google (social login), no tiene contrasena. Al intentar recuperar, el sistema le dice: «Tu cuenta usa login de Google. Haz clic en ‘Continuar con Google’ para entrar.»
7. Gestion de sesiones
Concepto
Valor
Descripcion
Access Token (JWT)
Expira en 1 hora
Token corto para cada peticion. Se renueva automaticamente
Refresh Token
Expira en 7 dias
Token largo para renovar el access token sin volver a loguear
Almacenamiento
Cookie httpOnly
No accesible desde JavaScript = protegido contra XSS
Sesion persistente
Si (por defecto)
El usuario no tiene que loguear cada vez que abre el navegador
Cerrar sesion
Menu avatar → «Cerrar sesion»
supabase.auth.signOut() elimina tokens
Multiples dispositivos
Permitido
Puede estar logueado en PC + telefono simultaneamente