Skip to content

feat(auth): Clerk JWT authentication with Supabase user sync#17

Merged
Yosoyepa merged 3 commits intodevelopfrom
feature/CGAI-auth-clerk
Dec 1, 2025
Merged

feat(auth): Clerk JWT authentication with Supabase user sync#17
Yosoyepa merged 3 commits intodevelopfrom
feature/CGAI-auth-clerk

Conversation

@Yosoyepa
Copy link
Owner

@Yosoyepa Yosoyepa commented Dec 1, 2025

📝 Descripción

Implementa autenticación OAuth 2.0 con Clerk usando JWT tokens firmados con HS256.
El sistema valida tokens del frontend, extrae información del usuario y sincroniza
automáticamente con la tabla users en Supabase (patrón Lazy User Synchronization).

🎯 Historia de Usuario Relacionada

Closes #28 (CGAI-28: Autenticación Clerk)

🔧 Cambios Realizados

  • src/core/config/settings.py: Configuración con pydantic-settings para CLERK_SECRET_KEY
  • src/external/clerk_client.py: Cliente para validar JWT con excepciones personalizadas
  • src/repositories/user_repo.py: CRUD para tabla users con SQLAlchemy
  • src/services/auth_service.py: Orquestación de login con get_or_create
  • src/core/dependencies/auth.py: Dependencia FastAPI para rutas protegidas
  • src/routers/auth.py: Endpoints POST /login y GET /me
  • src/main.py: Registro del auth_router
  • tests/generate_jwt.py: Script para generar tokens de prueba

🧪 Cómo se Probó

  • Token JWT generado manualmente con script de prueba
  • Endpoint POST /login valida token y crea usuario en Supabase
  • Endpoint GET /me retorna información del usuario autenticado
  • Usuario sincronizado correctamente en tabla users de Supabase

✅ Checklist Previo al Merge

  • Mi código sigue las convenciones del proyecto
  • Mis commits siguen Conventional Commits
  • He hecho rebase con develop
  • He ejecutado linting localmente
  • He verificado coverage >75%

📸 Screenshots

image image - Backend API

📚 Notas Adicionales

  • JWT Template de Clerk configurado con claims: email, name, role
  • Clerk agrega automáticamente sub (user_id) a todos los tokens
  • El frontend debe llamar getToken({ template: "supabase" }) para obtener el JWT
  • Algoritmo: HS256 con CLERK_SECRET_KEY

- Add ClerkClient for JWT validation with HS256 algorithm
- Add UserRepository for CRUD operations on users table
- Add AuthService to orchestrate login and token validation
- Add auth dependency (get_current_user, get_optional_user)
- Add /api/v1/auth/login and /api/v1/auth/me endpoints
- Sync users from Clerk to Supabase on login
- Add email-validator dependency for pydantic EmailStr

Closes CGAI-28
@Yosoyepa Yosoyepa merged commit 6c8093b into develop Dec 1, 2025
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant