Changes include: - Updated architecture documentation - Enhanced module definitions (OQI-001 to OQI-008) - ML integration documentation updates - Trading strategies documentation - Orchestration and inventory updates - Docker configuration updates 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
11 KiB
| id | title | type | status | priority | epic | story_points | created_date | updated_date |
|---|---|---|---|---|---|---|---|---|
| US-AUTH-003 | Login con Google | User Story | Done | Alta | OQI-001 | 5 | 2025-12-05 | 2026-01-04 |
US-AUTH-003: Login con Google
Version: 1.0.0 Fecha: 2025-12-05 Estado: ✅ Implementado Story Points: 5 Prioridad: P0 (Crítica) Épica: OQI-001
Historia de Usuario
Como visitante de OrbiQuant Quiero poder iniciar sesión con mi cuenta de Google Para acceder rápidamente sin crear nuevas credenciales
Criterios de Aceptación
AC-001: Botón de Google visible
Dado que estoy en la página de login o registro Cuando veo las opciones de inicio de sesión Entonces debería ver un botón "Continuar con Google" claramente visible
AC-002: Redirección a Google
Dado que hago click en "Continuar con Google" Cuando se inicia el flujo OAuth Entonces debería ser redirigido a la página de autorización de Google
AC-003: Autorización exitosa (usuario nuevo)
Dado que autorizo el acceso en Google Y mi email de Google no está registrado en OrbiQuant Cuando Google me redirige de vuelta Entonces debería:
- Crear una nueva cuenta automáticamente
- Usar mis datos de Google (nombre, email, foto)
- Marcar mi email como verificado
- Iniciar sesión automáticamente
- Ser redirigido al dashboard
AC-004: Autorización exitosa (usuario existente)
Dado que autorizo el acceso en Google Y mi email de Google ya está registrado en OrbiQuant Cuando Google me redirige de vuelta Entonces debería:
- Vincular Google a mi cuenta existente
- Iniciar sesión automáticamente
- Ser redirigido al dashboard
AC-005: Cancelación de autorización
Dado que hago click en "Continuar con Google" Cuando cancelo la autorización en Google Entonces debería:
- Ser redirigido a la página de login
- Ver un mensaje "Autorización cancelada"
AC-006: Error de Google
Dado que hago click en "Continuar con Google" Cuando ocurre un error con Google Entonces debería:
- Ser redirigido a la página de login
- Ver un mensaje "Error al conectar con Google. Intenta de nuevo."
AC-007: Desvinculación de Google
Dado que tengo Google vinculado a mi cuenta Y tengo otro método de autenticación activo Cuando intento desvincular Google desde configuración Entonces debería poder desvincularlo exitosamente
AC-008: Protección de último método
Dado que Google es mi único método de autenticación Cuando intento desvincularlo Entonces debería ver un mensaje "No puedes eliminar tu único método de acceso"
Flujo Visual
┌──────────────────────────────────────────────────────────────────────────┐
│ │
│ PASO 1: Click en Google │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Inicia sesión en OrbiQuant │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────────────────────┐│ │
│ │ │ 🔵 Continuar con Google → ││ │
│ │ └──────────────────────────────────────────────────────────────┘│ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ PASO 2: Autorización en Google │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌────────────────────────────────────────────────────────────┐ │ │
│ │ │ Google │ │ │
│ │ │ │ │ │
│ │ │ OrbiQuant IA quiere acceder a tu cuenta de Google │ │ │
│ │ │ │ │ │
│ │ │ Esto permitirá a OrbiQuant IA: │ │ │
│ │ │ • Ver tu dirección de correo electrónico │ │ │
│ │ │ • Ver tu información personal básica │ │ │
│ │ │ │ │ │
│ │ │ [Cancelar] [Permitir] │ │ │
│ │ │ │ │ │
│ │ └────────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ PASO 3: Redirección exitosa │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────────────────────┐│ │
│ │ │ ││ │
│ │ │ ⏳ Completando inicio de sesión... ││ │
│ │ │ ││ │
│ │ └──────────────────────────────────────────────────────────────┘│ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ PASO 4: Dashboard │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ¡Bienvenido, Juan! 👋 │ │
│ │ │ │
│ │ Dashboard... │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────────┘
Datos Obtenidos de Google
| Campo | Uso |
|---|---|
id |
provider_user_id en oauth_accounts |
email |
Email del usuario (si no tiene) |
verified_email |
Marcar email como verificado |
given_name |
Nombre del usuario |
family_name |
Apellido del usuario |
picture |
Avatar del usuario |
Notas Técnicas
Configuración Google Cloud Console
- Crear proyecto en Google Cloud Console
- Habilitar Google+ API
- Configurar OAuth consent screen
- Crear OAuth 2.0 credentials
- Agregar redirect URIs autorizados
Variables de Entorno
GOOGLE_CLIENT_ID=xxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=xxx
GOOGLE_CALLBACK_URL=https://api.orbiquant.com/auth/oauth/google/callback
Scopes Solicitados
const scopes = ['profile', 'email'];
Frontend
- Componente:
apps/frontend/src/modules/auth/components/SocialLoginButtons.tsx - Callback:
apps/frontend/src/modules/auth/pages/AuthCallback.tsx
Backend
- Service:
apps/backend/src/modules/auth/services/oauth.service.ts - Endpoint:
POST /api/v1/auth/oauth/google
Errores Comunes
| Error | Causa | Solución |
|---|---|---|
invalid_client |
Client ID incorrecto | Verificar configuración |
redirect_uri_mismatch |
URL no autorizada | Agregar URL en Google Console |
access_denied |
Usuario canceló | Mostrar mensaje amigable |