# Implementación Autenticación Dual ## Objetivo - PACIENTES: Solo API UTB - DOCTORES/ADMINS: Credenciales locales (BD) ## Estado: ✅ COMPLETADO --- ## Cambios Realizados ### 1. `src/lib/auth.ts` - ✅ Importar bcrypt - ✅ Paso 1: Intentar API UTB solo para PACIENTES - ✅ Paso 2: Autenticación local para DOCTOR/ADMIN - ✅ Validación de contraseña con bcrypt ### 2. `src/app/api/auth/register/route.ts` - ✅ Validar rol (solo DOCTOR/ADMIN) - ✅ Marcar `isExternalAuth: false` - ✅ Cambiar rol por defecto a DOCTOR ### 3. `scripts/seed-admin.ts` - ✅ Usuario con identificación `0000000001` y username `0000000001-ADMIN` - ✅ Usuario con identificación `0000000002` y username `0000000002-DOCTOR` - ✅ Formato consistente con estudiantes: `identificacion-ROL` - ✅ Marcar `isExternalAuth: false` - ✅ Script ejecutado exitosamente ### 4. `src/app/auth/login/page.tsx` - ✅ Banner dual explicando tipos de usuario ### 5. `src/app/api/account/update/route.ts` - ✅ Importar bcrypt - ✅ Leer campo `isExternalAuth` del usuario - ✅ Si UTB: bloquear cambio contraseña - ✅ Si local: permitir cambio con validación bcrypt ### 6. Componentes de cuenta - ✅ `PersonalInfoSection`: Prop `isExternalAuth`, campos condicionales - ✅ `PasswordChangeSection`: Formulario completo si local, mensaje si UTB - ✅ `page.tsx`: Pasar `isExternalAuth` a componentes --- ## Usuarios Creados ``` Admin: 0000000001-ADMIN / admin123 Doctor: 0000000002-DOCTOR / doctor123 ``` --- ## Comportamiento ### Estudiantes (PATIENT) - Login con credenciales UTB (ej: `1206706838-EST`) - Autenticación vía API UTB - Campos nombre/apellido bloqueados - Contraseña gestionada por UTB - `isExternalAuth: true` ### Doctores/Admins (DOCTOR/ADMIN) - Login con formato: `identificacion-ROL` (ej: `0000000001-ADMIN`) - Autenticación vía bcrypt en BD - Campos nombre/apellido editables - Pueden cambiar contraseña - `isExternalAuth: false` --- ## Notas - No hay errores de compilación - Script de seeding listo para reutilizar - Sistema soporta credenciales mixtas