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