ConTodo
Backend / Seguridad

Autenticación: email+contraseña (hecho), Google OAuth, 2FA TOTP y recuperación

Autenticación de ConTodo

1. Hecho y en producción (Fase 2)

  • Email + contraseña con hash bcrypt, multi-tenant (usuario → empresa + rol).
  • Sesiones server-side (tabla sessions, cookie httpOnly/secure/sameSite=lax, 30 días, revocables).
  • Idioma por perfil (users.locale).
  • Recuperación de contraseña: /api/v1/auth/forgot genera token (1h) + /api/v1/auth/reset. (Falta conectar el envío de correo — ver §4.)
  • Endpoints: POST /api/v1/auth/login, GET /api/v1/auth/me, POST /api/v1/auth/logout, POST /api/v1/auth/forgot, POST /api/v1/auth/reset. Página /login.
  • Esquema listo para Google y TOTP: users.google_id, users.totp_secret, users.totp_enabled.

2. Google OAuth (mañana)

  • Botón "Continuar con Google" → OAuth 2.0 (Authorization Code + PKCE).
  • Crea/asocia usuario por google_id + email; lo liga a un tenant (invitación o dominio).
  • Requiere: Client ID/Secret en Google Cloud + URL de callback https://contodo.app/api/v1/auth/google/callback.
  • Stack: arctic/@auth/core o implementación propia (ya tenemos sesiones).

3. 2FA — TOTP (mañana)

  • Opcional por usuario (app autenticadora: Google Authenticator/Authy).
  • Activar: generar totp_secret, mostrar QR (otpauth://), el usuario confirma un código → totp_enabled=true.
  • En login: si totp_enabled, pedir el código de 6 dígitos antes de crear la sesión (el login ya devuelve twofa: true).
  • Lib: otplib (TOTP) + qrcode.

4. Correo (recuperación + notificaciones)

¿Se puede enviar por el VPS? Sí — tiene exim. Pero la entregabilidad de un VPS suele caer en spam.

  • Recomendado: Resend (free tier, API simple) o Amazon SES (muy barato) como relay. Se conecta en forgot (link de recuperación) y en notificaciones.
  • Alternativa: enrutar exim a través de SES.
  • Variables: RESEND_API_KEY (o SMTP del relay).

5. SUNAT — "¿cómo nos integramos?" (recap)

Vía proveedor PSE/OSE (Nubefact/Apisperú/Bizlinks…) con API REST + una capa de facturación abstracta en ConTodo (igual que la de pagos). Cada venta/guía confirmada dispara el comprobante y guarda XML/CDR/PDF. Detalle completo en [[23-integracion-sunat]].

6. Infra lista (esta fase)

  • Redis (cache + colas) y MinIO (S3-compatible para fotos/PDF/CSV) ya corriendo en el docker-compose del VPS. Pendiente: cablear rate-limit (Redis), jobs (pg-boss/BullMQ) y subida de archivos (MinIO). Ver [[31-infra-ops-roadmap]].

Relacionado: [[20-roadmap-backend]] · [[26-despliegue-costos-admin]] · [[32-api-integraciones]].