# Migración a Autenticación API UTB ## Estado: ✅ Completado --- ## 1. Variables de Entorno ### Archivo: `.env` - [x] Agregar `UTB_API_URL=https://sai.utb.edu.ec/v2/ws/auth/login` - [x] Agregar `UTB_API_APP_ID=6d834518ee8832b9455d3887aa0dc1a369bccee2d017812994ab066faae42067` - [x] Agregar `UTB_API_APP_TOKEN=c9449f3452c6645081282a01240c0679eb1ca1e440eebf322eb23d5f2260c2d4` --- ## 2. Configuración ### Archivo: `src/lib/config.ts` - [x] Agregar sección `utbApi` - [x] Agregar validación de credenciales en logger --- ## 3. Cliente API UTB ### Archivo: `src/lib/utb-api.ts` (nuevo) - [x] Crear función `authenticateUser(username: string, password: string)` - [x] Configurar headers: `X-App-Id`, `X-App-Token`, `Content-Type` - [x] Manejo de respuesta exitosa (200) - [x] Manejo de errores (400, 401, 405) - [x] Retornar interface `UTBAuthResponse` --- ## 4. Schema Prisma ### Archivo: `prisma/schema.prisma` - [x] Agregar campo `identificacion String? @unique` al modelo `User` - [x] Agregar campo `isExternalAuth Boolean @default(false)` al modelo `User` - [x] Modificar `email String? @unique` (hacerlo opcional) - [x] Modificar `password String?` (hacerlo opcional) --- ## 5. Migración Base de Datos - [x] Ejecutar `npx prisma migrate dev --name add_utb_fields` - [x] Verificar que la migración se aplicó correctamente --- ## 6. Lógica de Autenticación ### Archivo: `src/lib/auth.ts` - [x] Importar cliente UTB API - [x] Modificar `authorize()`: - [x] Validar contra API UTB (no bcrypt) - [x] Buscar usuario por `identificacion` o `username` - [x] Si no existe, crear usuario nuevo - [x] Mapear datos de API a modelo User - [x] Mapear roles: ESTUDIANTE→PATIENT, DOCENTE→DOCTOR, ADMINISTRADOR→ADMIN - [x] Si existe, actualizar datos desde API --- ## 7. Formulario de Login ### Archivo: `src/app/auth/login/page.tsx` - [x] Cambiar campo `email` por `username` - [x] Actualizar labels y placeholders - [x] Actualizar mensaje informativo --- ## 8. API Account Update ### Archivo: `src/app/api/account/update/route.ts` - [x] Prevenir cambio de contraseña para usuarios UTB - [x] Validar que `password` no sea null antes de bcrypt.compare --- ## 9. Tipos TypeScript ### Archivo: `src/types/utb-api.d.ts` (nuevo) - [x] Definir `UTBAuthResponse` - [x] Definir `UTBUser` - [x] Definir `UTBErrorResponse` --- ## 10. Build y Pruebas - [x] Verificar que el proyecto compila sin errores - [x] Probar login con usuario estudiante - [x] Probar login con usuario docente - [x] Verificar creación de usuario en DB - [x] Verificar actualización de datos existentes - [x] Probar manejo de credenciales inválidas --- ## 11. UI de Cuenta ### Archivos: `src/components/account/*.tsx`, `src/app/account/page.tsx` - [x] Banner informativo para usuarios UTB - [x] Mostrar `identificacion` (solo lectura) - [x] Bloquear campos nombre/apellido para usuarios UTB - [x] Email opcional y editable - [x] Deshabilitar cambio de contraseña para usuarios UTB - [x] Link a SAI UTB para cambios --- ## Estado Final: ✅ COMPLETADO Y SIMPLIFICADO **Migración exitosa a autenticación API UTB.** ### Simplificación UTB-Only (100% dependencia API) **Decisión:** El sistema ya no soporta usuarios locales. Todos los usuarios deben autenticarse mediante la API de UTB. **Cambios de simplificación realizados:** 1. **Componentes de cuenta simplificados:** - `PersonalInfoSection.tsx`: Siempre muestra banner UTB, campos nombre/apellido bloqueados - `PasswordChangeSection.tsx`: Solo muestra mensaje de gestión por UTB, sin campos de contraseña 2. **API de actualización simplificada:** - Eliminados checks de `isExternalAuth` - Solo permite actualizar: email y profileImage - Bloquea cualquier intento de cambio de contraseña - Removidos imports y lógica de bcrypt no utilizados 3. **Props simplificadas:** - Eliminado prop `isExternalAuth` de componentes de cuenta - Props de contraseña en `PasswordChangeSection` marcadas como opcionales por compatibilidad **Estado actual:** - ✅ Autenticación mediante API externa - ✅ Sincronización automática de datos - ✅ Protección de campos gestionados por UTB - ✅ UI simplificada sin lógica condicional - ✅ Build exitoso sin errores - ✅ Código más limpio y mantenible **Campos editables:** - ✅ Email (opcional) - ✅ Foto de perfil **Campos bloqueados (gestionados por UTB):** - 🔒 Nombre - 🔒 Apellido - 🔒 Fecha de nacimiento - 🔒 Contraseña --- ## Notas Importantes - **Email opcional:** Los usuarios pueden agregarlo después en `/account` - **Password:** Se guarda vacío para usuarios UTB (no se usa) - **Identificación:** Campo único que vincula con API UTB - **Roles:** Mapeo automático según `tipo` de la API - **Reportes:** Se mantienen vinculados por `userId` interno - **Sin usuarios locales:** Ya no se soporta autenticación local, solo UTB