Skip to content

Repository files navigation

API Expo - FastAPI con Autenticación OAuth

API REST desarrollada con FastAPI que incluye autenticación OAuth con Google, basada en el proyecto qrry.

Características

  • ✅ FastAPI con Python 3.13
  • ✅ Autenticación JWT
  • ✅ OAuth con Google
  • ✅ Base de datos PostgreSQL con SQLAlchemy async
  • ✅ Sistema de roles y permisos
  • ✅ Docker y Docker Compose
  • ✅ CORS configurado
  • ✅ Documentación automática con Swagger

Estructura del Proyecto

api-expo/
├── api/
│   ├── core/
│   │   ├── oauth.py          # Configuración OAuth Google
│   │   └── security.py       # JWT y autenticación
│   ├── db/
│   │   ├── dependencies.py   # Dependencias de DB
│   │   └── session.py        # Configuración SQLAlchemy
│   ├── models/
│   │   └── usuario.py        # Modelo de Usuario
│   ├── routers/
│   │   ├── auth.py          # Endpoints de autenticación
│   │   └── usuarios.py      # Endpoints de usuarios
│   ├── schemas/
│   │   └── usuario.py       # Esquemas Pydantic
│   └── main.py              # Aplicación principal
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
├── .env.example
└── README.md

Configuración

1. Variables de Entorno

Copia el archivo .env.example a .env y configura las variables:

cp .env.example .env

Edita el archivo .env con tus valores:

# Configuración de la base de datos
DATABASE_URL=postgresql+asyncpg://postgres:password@localhost:5433/apiexpo

# Configuración JWT
SECRET_KEY=tu_clave_secreta_super_segura_aqui
ALGORITHM=HS256
SESSION_SECRET_KEY=otra_clave_secreta_para_sesiones

# Configuración OAuth Google
GOOGLE_CLIENT_ID=tu_google_client_id_aqui
GOOGLE_CLIENT_SECRET=tu_google_client_secret_aqui

2. Configuración OAuth Google

  1. Ve a Google Cloud Console
  2. Crea un nuevo proyecto o selecciona uno existente
  3. Habilita la API de Google+
  4. Crea credenciales OAuth 2.0
  5. Configura las URLs de redirección:
    • http://localhost:8001/auth/google/callback

Instalación y Ejecución

Con Docker (Recomendado)

# Construir y ejecutar los contenedores
docker-compose up --build

# En modo detached (segundo plano)
docker-compose up -d --build

Sin Docker

# Crear entorno virtual
python -m venv venv

# Activar entorno virtual
# En Windows:
venv\Scripts\activate
# En Linux/Mac:
source venv/bin/activate

# Instalar dependencias
pip install -r requirements.txt

# Ejecutar la aplicación
cd api
uvicorn main:app --host 0.0.0.0 --port 8000 --reload

Uso

Documentación API

Una vez ejecutando, puedes acceder a:

Endpoints Principales

Autenticación

  • POST /auth/register - Registrar nuevo usuario
  • POST /auth/token - Login con username/password
  • GET /auth/me - Obtener usuario actual
  • GET /auth/google/login - Login con Google
  • GET /auth/google/callback - Callback OAuth Google

Usuarios

  • GET /usuarios/ - Listar usuarios (admin)
  • GET /usuarios/me - Obtener perfil actual
  • GET /usuarios/{id} - Obtener usuario por ID
  • PUT /usuarios/me - Actualizar perfil actual
  • PUT /usuarios/{id} - Actualizar usuario (admin)
  • DELETE /usuarios/me - Eliminar cuenta actual

Ejemplo de Uso

# Registrar usuario
curl -X POST "http://localhost:8001/auth/register" \
     -H "Content-Type: application/json" \
     -d '{
       "username": "testuser",
       "email": "test@example.com",
       "password": "testpassword",
       "first_name": "Test",
       "last_name": "User"
     }'

# Login
curl -X POST "http://localhost:8001/auth/token" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "username=testuser&password=testpassword"

# Usar token en requests
curl -X GET "http://localhost:8001/auth/me" \
     -H "Authorization: Bearer YOUR_TOKEN_HERE"

Desarrollo

Estructura de Roles

  • USUARIO: Rol básico, puede acceder a sus propios datos
  • ADMIN: Acceso completo, puede gestionar todos los usuarios

Agregar Nuevos Endpoints

  1. Crear el modelo en models/
  2. Crear los esquemas en schemas/
  3. Crear el router en routers/
  4. Registrar el router en main.py

Testing

# Ejecutar tests
pytest

# Con coverage
pytest --cov=api

Puertos

Troubleshooting

Error de conexión a la base de datos

  • Verifica que PostgreSQL esté ejecutándose
  • Revisa las variables de entorno en .env
  • Asegúrate de que el puerto 5433 esté disponible

Error OAuth Google

  • Verifica las credenciales en Google Cloud Console
  • Asegúrate de que las URLs de redirección estén configuradas correctamente
  • Revisa que las variables GOOGLE_CLIENT_ID y GOOGLE_CLIENT_SECRET estén configuradas

Contribuir

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abre un Pull Request

Licencia

Este proyecto está bajo la Licencia MIT - ver el archivo LICENSE para detalles.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages