DUAL_AUTH_IMPLEMENTATION.md 2.0 KB

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