trading-platform/docs/02-definicion-modulos/OQI-001-fundamentos-auth/historias-usuario/US-AUTH-004-oauth-facebook.md
rckrdmrd c1b5081208 feat(ml): Complete FASE 11 - BTCUSD update and comprehensive documentation alignment
ML Engine Updates:
- Updated BTCUSD with Polygon API data (2024-2025): 215,699 new records
- Re-trained all ML models: Attention (R²: 0.223), Base, Metamodel (87.3% confidence)
- Backtest results: +176.71R profit with aggressive_filter strategy

Documentation Consolidation:
- Created docs/99-analisis/_MAP.md index with 13 new analysis documents
- Consolidated inventories: removed duplicates from orchestration/inventarios/
- Updated ML_INVENTORY.yml with BTCUSD metrics and training results
- Added execution reports: FASE11-BTCUSD, correction issues, alignment validation

Architecture & Integration:
- Updated all module documentation with NEXUS v3.4 frontmatter
- Fixed _MAP.md indexes across all folders
- Updated orchestration plans and traces

Files: 229 changed, 5064 insertions(+), 1872 deletions(-)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 09:31:29 -06:00

306 lines
11 KiB
Markdown

---
id: "US-AUTH-004"
title: "OAuth Facebook"
type: "User Story"
status: "To Do"
priority: "Alta"
epic: "OQI-001"
story_points: 3
created_date: "2025-12-05"
updated_date: "2026-01-04"
---
# US-AUTH-004: OAuth Facebook
**Version:** 1.0.0
**Fecha:** 2025-12-05
**Estado:** Pendiente
**Story Points:** 3
**Prioridad:** P1 (Alta)
**Épica:** [OQI-001](../_MAP.md)
---
## Historia de Usuario
**Como** visitante o usuario de Trading Platform
**Quiero** poder registrarme e iniciar sesión usando mi cuenta de Facebook
**Para** tener un acceso rápido y sencillo sin crear una nueva contraseña
---
## Criterios de Aceptación
### AC-001: Botón de Facebook visible
**Dado** que estoy en la página de registro o login
**Cuando** veo las opciones de autenticación
**Entonces** debería ver un botón "Continuar con Facebook"
**Y** debería tener el color y logo oficial de Facebook
### AC-002: Flujo de OAuth
**Dado** que hago click en "Continuar con Facebook"
**Cuando** se abre la ventana de Facebook
**Entonces** debería:
1. Ver la pantalla de autorización de Facebook
2. Poder revisar los permisos solicitados
3. Poder autorizar o cancelar
### AC-003: Permisos solicitados
**Dado** que estoy en la pantalla de autorización de Facebook
**Cuando** reviso los permisos
**Entonces** la app debería solicitar únicamente:
- Email
- Nombre público
- Foto de perfil
### AC-004: Primer registro exitoso
**Dado** que es mi primera vez usando Facebook OAuth
**Cuando** autorizo los permisos
**Entonces** debería:
1. Crear mi cuenta automáticamente
2. Recibir un JWT token
3. Ser redirigido al dashboard
4. Ver mi nombre y foto de Facebook
5. NO necesitar verificación de email
### AC-005: Login existente
**Dado** que ya tengo una cuenta vinculada con Facebook
**Cuando** uso "Continuar con Facebook"
**Entonces** debería:
1. Iniciar sesión automáticamente
2. Ser redirigido al dashboard
3. NO ver pantalla de registro
### AC-006: Email ya registrado con otro método
**Dado** que mi email de Facebook ya está registrado con email/password
**Cuando** intento usar Facebook OAuth
**Entonces** debería ver un mensaje:
- "Este email ya está registrado. ¿Deseas vincular tu cuenta de Facebook?"
**Y** debería poder vincular las cuentas
### AC-007: Cancelación del flujo
**Dado** que inicio el flujo de Facebook OAuth
**Cuando** cancelo en la ventana de Facebook
**Entonces** debería:
1. Volver a la página de login/registro
2. Ver un mensaje "Autenticación cancelada"
3. Poder intentar con otro método
### AC-008: Error de Facebook
**Dado** que hay un error en el servicio de Facebook
**Cuando** intento autenticarme
**Entonces** debería ver un mensaje:
- "Error al conectar con Facebook. Intenta más tarde"
**Y** debería poder usar otro método de autenticación
---
## Mockup
```
┌─────────────────────────────────────────────────────────────┐
│ │
│ 🌟 Bienvenido a Trading Platform │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 📧 Email │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 🔵 Continuar con Facebook │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 🔴 Continuar con Google │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ [Twitter/X] [Apple] [GitHub] │
│ │
└─────────────────────────────────────────────────────────────┘
Ventana de Facebook OAuth:
┌─────────────────────────────────────────────────────────────┐
│ facebook.com ✕ │
├─────────────────────────────────────────────────────────────┤
│ │
│ Trading Platform desea acceder a: │
│ │
│ ✓ Tu nombre y foto de perfil │
│ ✓ Tu dirección de email │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Continuar como Juan Pérez │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Cancelar │
│ │
└─────────────────────────────────────────────────────────────┘
```
---
## Tareas Técnicas
### Database (DB)
- [ ] Agregar campos a tabla `users`:
```sql
ALTER TABLE users ADD COLUMN facebook_id VARCHAR(255) UNIQUE;
ALTER TABLE users ADD COLUMN avatar_url TEXT;
```
- [ ] Tabla `oauth_connections`:
```sql
CREATE TABLE oauth_connections (
id UUID PRIMARY KEY,
user_id UUID REFERENCES users(id),
provider VARCHAR(50), -- 'facebook', 'google', etc
provider_user_id VARCHAR(255),
access_token TEXT,
refresh_token TEXT,
token_expires_at TIMESTAMP,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
UNIQUE(provider, provider_user_id)
);
```
### Backend (BE)
- [ ] Configurar Facebook App en Meta Developers
- [ ] Obtener App ID y App Secret
- [ ] Endpoint `GET /api/v1/auth/facebook`
- Redirige a Facebook OAuth
- [ ] Endpoint `GET /api/v1/auth/facebook/callback`
- Recibe código de autorización
- Intercambia por access token
- Obtiene datos del usuario
- Crea o actualiza usuario
- Genera JWT token
- [ ] Service `FacebookOAuthService`
- `getAuthorizationUrl()`
- `exchangeCodeForToken()`
- `getUserProfile()`
- `linkAccount()`
- [ ] Manejo de refresh tokens
- [ ] Tests unitarios (8 casos)
- [ ] Tests de integración con mock de Facebook API
### Frontend (FE)
- [ ] Botón "Continuar con Facebook"
- [ ] Manejo de popup o redirect de OAuth
- [ ] Recepción de callback
- [ ] Almacenamiento de token JWT
- [ ] Estado de loading durante OAuth
- [ ] Manejo de errores
- [ ] Modal de vinculación de cuentas
- [ ] Tests con React Testing Library
### Testing (QA)
- [ ] E2E: Registro nuevo con Facebook
- [ ] E2E: Login existente con Facebook
- [ ] E2E: Vinculación de cuentas
- [ ] E2E: Cancelación del flujo
- [ ] E2E: Permisos rechazados
- [ ] Test de seguridad: Validación de tokens
- [ ] Test de seguridad: CSRF protection
- [ ] Mock de Facebook API para tests
---
## Dependencias
- **Bloqueantes:**
- Cuenta de Facebook Developer
- Configuración de dominio verificado
- SSL/HTTPS en producción
- **Deseables:**
- US-AUTH-003: Para mantener consistencia con Google OAuth
---
## Definition of Ready (DoR)
- [ ] Facebook App creada y configurada
- [ ] Credenciales de desarrollo disponibles
- [ ] Mockups aprobados
- [ ] API contract definido
- [ ] Política de privacidad publicada (requerido por Facebook)
---
## Definition of Done (DoD)
- [ ] Código implementado y revisado
- [ ] Tests unitarios con 80%+ cobertura
- [ ] Tests de integración pasando
- [ ] Tests E2E implementados
- [ ] Facebook App Review aprobado (para producción)
- [ ] Documentación actualizada
- [ ] Manejo de errores completo
- [ ] Logs implementados
- [ ] QA aprobado en staging
- [ ] Deploy a producción exitoso
---
## Notas Técnicas
### Facebook OAuth Flow
1. Frontend redirige a `/api/v1/auth/facebook`
2. Backend redirige a Facebook con:
- `client_id`
- `redirect_uri`
- `scope=email,public_profile`
- `state` (CSRF token)
3. Usuario autoriza en Facebook
4. Facebook redirige a `redirect_uri` con `code`
5. Backend intercambia `code` por `access_token`
6. Backend obtiene perfil del usuario
7. Backend crea/actualiza usuario
8. Backend genera JWT y redirige a frontend
### Facebook API Endpoints
- Authorization: `https://www.facebook.com/v18.0/dialog/oauth`
- Token exchange: `https://graph.facebook.com/v18.0/oauth/access_token`
- User info: `https://graph.facebook.com/v18.0/me?fields=id,name,email,picture`
### Environment Variables
```env
FACEBOOK_APP_ID=your_app_id
FACEBOOK_APP_SECRET=your_app_secret
FACEBOOK_CALLBACK_URL=https://trading.com/api/v1/auth/facebook/callback
```
### Security Considerations
- Validar `state` parameter para prevenir CSRF
- No almacenar access tokens en localStorage
- Usar refresh tokens cuando sea posible
- Validar que el email viene de Facebook
- Rate limiting en endpoints de OAuth
---
## Requerimientos Relacionados
- [RF-AUTH-003: OAuth Social](../requerimientos/RF-AUTH-003-oauth.md)
## Especificaciones Relacionadas
- [ET-AUTH-002: JWT Tokens](../especificaciones/ET-AUTH-002-jwt.md)
- [ET-AUTH-004: OAuth Integration](../especificaciones/ET-AUTH-004-oauth.md)