¿Necesitas ayuda? Escriba su cadena de búsqueda. Se requiere un mínimo de 4 caracteres.

Abrir lista de categorías

Sistema de Autenticacion: Login, Registro y Login Social (Google)

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.

Referencia: Esquema BD Nucleo 1 | Diseno de Interfaz (Sec 3.1 y 3.2) | Identidad Visual


1. Metodos de autenticacion

El ERP ofrece dos formas de entrar. Ambas crean la misma cuenta en Supabase Auth y el mismo perfil en public.profiles:

MetodoComo funcionaPara quienVentaja
Email + ContrasenaEl usuario escribe su correo y crea una contrasenaCualquieraNo depende de terceros. Funciona con cualquier correo
Google (Social Login)Un clic en «Continuar con Google». Se autentica con su cuenta GmailCualquiera con GmailSin 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.

2. Flujo de registro con email

PasoPantallaQue pideQue pasa por detras
1Formulario de registroEmail, nombre, apellidoValidacion: email unico, formato correcto
2Crear contrasenaContrasena + confirmar contrasenaRequisitos: minimo 8 caracteres, 1 mayuscula, 1 numero. Indicador de fortaleza visual
3Verificacion de emailCodigo de 6 digitos enviado al correoSupabase envia email automaticamente. Expira en 24 horas. Boton «Reenviar codigo»
4Completar perfil (opcional)Foto, fecha nacimiento, telefono, direccionSe puede saltar. Barra de completitud muestra «Tu perfil esta al 40%»
5BienvenidaTour guiado del dashboard (tooltips interactivos). Redirige a «Mi Panel»

2.1 Que pasa en la base de datos

Usuario llena formulario
        │
        ▼
supabase.auth.signUp({        ← Supabase Auth crea el usuario
  email, password,
  options: { data: { nombre, apellido } }
})
        │
        ▼
auth.users → nueva fila       ← UUID generado automaticamente
        │
        ▼
TRIGGER on_auth_user_created   ← Se dispara automaticamente
        │
        ▼
public.profiles → nueva fila  ← Copia UUID, email, nombre, apellido
        │                        Estatus = 'activo'
        ▼
Email de verificacion enviado  ← Supabase lo envia, template personalizable
        │
        ▼
Usuario confirma email         ← auth.users.email_confirmed_at se llena
        │
        ▼
LISTO → Redirigir al dashboard

3. Registro de menores de edad (Alumnos CIA)

⚠️ 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:

ProblemaConsecuencia
La cuenta esta a nombre del padre, no del alumnoLos certificados INAC salen con datos incorrectos
El email es del padreLas notificaciones llegan al padre, no al alumno
El padre crea multiples cuentas para varios hijosIdentidades cruzadas. Imposible saber quien es quien
El alumno cumple 18 y quiere «su» cuentaNo puede porque la identidad esta vinculada al padre

3.2 Como funciona el registro de un menor

PasoQue pasaDetalle
1El representante se registra primeroCrea su propia cuenta con sus datos reales (cedula, email, nombre)
2Desde su perfil, clic en «Agregar representado»Formulario especial para registrar al menor
3Llena datos del menorNombre, apellido, cedula del menor, fecha de nacimiento. Email del menor (si tiene) o se genera uno temporal
4Se crea la cuenta del menorprofiles: datos del menor. user_representantes: vincula menor ↔ representante
5El representante administra la cuentaPuede ver notas, pagar cuotas, subir documentos del menor. El menor accede con sus propias credenciales (si tiene edad suficiente)
6Al cumplir 18: emancipacion de cuentaEl 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

ColumnaTipoDescripcion
iduuid (PK)ID del registro
menor_iduuid (FK → profiles)El alumno menor de edad
representante_iduuid (FK → profiles)El padre/madre/tutor (tiene su propia cuenta)
parentescovarchar(50)‘padre’, ‘madre’, ‘tutor_legal’, ‘otro’
es_responsable_financierobooleanSi este representante paga las cuotas del menor
puede_ver_notasbooleanSi puede acceder al historial academico
puede_autorizar_vuelosbooleanPara autorizaciones de vuelo especificas de CIA
activobooleanSe desactiva cuando el menor cumple 18
fecha_emancipaciondateFecha 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)

PasoQue ve el usuarioQue pasa por detras
1Clic en «Continuar con Google»Se abre ventana emergente de Google
2Selecciona su cuenta GmailGoogle autentica y devuelve token + datos del perfil
3Redireccion automatica al ERPSupabase recibe el token, crea/vincula la cuenta
4Dashboard («Mi Panel»)Si es primera vez: trigger crea profiles + tour de bienvenida

3.1 Datos que Google nos da automaticamente

Dato de GoogleSe guarda enNotas
Emailprofiles.emailSiempre disponible
Nombre completoprofiles.nombre + apellidoSe separa automaticamente
Foto de perfilprofiles.foto_urlURL de Google. Se copia a Storage despues
Email verificadoauth.email_confirmed_atGoogle ya lo verifico — no pedimos codigo

3.2 Configuracion requerida en Google Cloud

ConfiguracionDondeValor
OAuth Client IDGoogle Cloud Console → APIs → CredentialsSe genera al crear la app
OAuth Client SecretMismo lugarSe copia a Supabase Dashboard
Redirect URIGoogle Console + Supabasehttps://[TU-PROYECTO].supabase.co/auth/v1/callback
Dominios autorizadosGoogle Consoleapp.aeroidea.net, localhost (dev)
Habilitar en SupabaseSupabase Dashboard → Auth → Providers → GooglePegar Client ID + Secret

5. Login normal (usuario existente)

PasoQue veQue pasa
1Pantalla de login: email + contrasenaFormulario con validacion en tiempo real
2Clic «Iniciar sesion»supabase.auth.signInWithPassword({ email, password })
3aSi es correcto → DashboardSupabase devuelve JWT token + refresh token. Se guarda en cookie httpOnly
3bSi es incorrecto → Error«Email o contrasena incorrectos» (no revelar cual fallo)
3cSi la cuenta esta suspendida«Tu cuenta ha sido suspendida. Contacta a soporte» + enlace

6. Recuperacion de contrasena

PasoQue veQue pasa
1Clic «Olvidaste tu contrasena?»Abre pantalla de recuperacion
2Ingresa su emailsupabase.auth.resetPasswordForEmail(email)
3«Te enviamos un enlace a tu correo»Supabase envia email con link magico (expira en 1 hora)
4Abre el link → pantalla «Nueva contrasena»Formulario con contrasena + confirmar + indicador de fortaleza
5«Contrasena actualizada» → redirige a loginsupabase.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

ConceptoValorDescripcion
Access Token (JWT)Expira en 1 horaToken corto para cada peticion. Se renueva automaticamente
Refresh TokenExpira en 7 diasToken largo para renovar el access token sin volver a loguear
AlmacenamientoCookie httpOnlyNo accesible desde JavaScript = protegido contra XSS
Sesion persistenteSi (por defecto)El usuario no tiene que loguear cada vez que abre el navegador
Cerrar sesionMenu avatar → «Cerrar sesion»supabase.auth.signOut() elimina tokens
Multiples dispositivosPermitidoPuede estar logueado en PC + telefono simultaneamente

8. Seguridad

MedidaImplementacionDescripcion
Contrasena seguraValidacion en frontend + SupabaseMinimo 8 chars, 1 mayuscula, 1 numero. Indicador visual de fortaleza
Rate limitingSupabase (automatico)Maximo 5 intentos fallidos por minuto. Despues: bloqueo temporal
CAPTCHAhCaptcha o TurnstileSe activa despues de 3 intentos fallidos
Email verificadoObligatorio para email. Automatico para GoogleNo puede acceder a funciones sensibles sin verificar
HTTPSObligatorioToda comunicacion encriptada. Sin excepciones
No borrar cuentasPolitica del ERPSe desactivan (estatus = ‘inactivo’). Los datos se preservan

9. Emails del sistema

Supabase envia estos emails automaticamente. Los templates son personalizables desde el Dashboard de Supabase:

EmailCuando se enviaContenido
Verificacion de emailAl registrarse con emailCodigo de 6 digitos o link de confirmacion
Recuperacion de contrasenaAl pedir «Olvide mi contrasena»Link magico para cambiar contrasena (expira 1h)
Cambio de emailSi el usuario cambia su correoConfirmacion al email nuevo + aviso al email viejo
BienvenidaPrimer login exitosoEmail de bienvenida con links utiles (via Edge Function, no Supabase)

10. Referencia

DocumentoRelacion
Esquema BD Nucleo 1El trigger on_auth_user_created que crea el perfil
Diseno de InterfazMockups de login, registro y dashboard (Sec 3)
Identidad VisualColores, logo y tipografia de las pantallas de auth
Stack TecnologicoSupabase Auth + Google Cloud Run
Normas de RolesQue roles se asignan al registrarse

Centro de soporte