Un template completo y seguro para autenticación de usuarios con FastAPI, PostgreSQL y autenticación basada en cookies.
- 🔐 Autenticación Segura: Sistema completo con JWT tokens y cookies HTTP-only
- 🗄️ PostgreSQL: Base de datos robusta con UUID como primary keys
- 🍪 Cookie-Based Auth: Tokens seguros sin exposición en el frontend
- 🧪 Testing Completo: Suite de tests con pytest y coverage
- 🐳 Docker Ready: Containerización completa con Docker Compose
- 📚 Documentación: API docs automática con Swagger/OpenAPI
- 🔄 Refresh Tokens: Sistema de renovación automática de tokens
- ⚡ FastAPI: Framework moderno y de alto rendimiento
- Backend: FastAPI 0.116.2+
- Base de Datos: PostgreSQL 13
- ORM: SQLAlchemy 2.0+
- Autenticación: JWT + bcrypt
- Validación: Pydantic v2
- Testing: pytest + FastAPI TestClient
- Containerización: Docker + Docker Compose
- Gestión de Dependencias: Poetry
- Docker y Docker Compose
- Python 3.11+ (opcional, para desarrollo local)
- Poetry (opcional, para desarrollo local)
-
Clona el repositorio:
git clone https://github.com/tu-usuario/FastApiUserTemplate.git cd FastApiUserTemplate
-
Levanta los servicios:
docker-compose up -d
-
¡Listo! La API estará disponible en:
- API: http://localhost:8000
- Documentación: http://localhost:8000/docs
- pgAdmin (opcional): http://localhost:5050
-
Clona e instala dependencias:
git clone https://github.com/tu-usuario/FastApiUserTemplate.git cd FastApiUserTemplate poetry install poetry shell
-
Levanta solo la base de datos:
docker-compose up -d db
-
Ejecuta la aplicación:
uvicorn src.fastapiusertemplate.main:app --reload
Método | Endpoint | Descripción |
---|---|---|
POST |
/register |
Registrar nuevo usuario |
POST |
/login |
Iniciar sesión |
POST |
/logout |
Cerrar sesión |
POST |
/refresh |
Renovar token |
Método | Endpoint | Descripción |
---|---|---|
GET |
/me |
Obtener perfil del usuario actual |
GET |
/protected |
Endpoint protegido de ejemplo |
Método | Endpoint | Descripción |
---|---|---|
GET |
/ |
Health check |
GET |
/docs |
Documentación Swagger |
- Cookies HTTP-only: Los tokens JWT se almacenan en cookies seguras
- Bcrypt Hashing: Passwords hasheados con salt automático
- Refresh Tokens: Renovación segura de tokens expirados
- CORS Configurado: Policies de CORS apropiadas
- Validación Estricta: Validación de entrada con Pydantic
-
Registro:
POST /register
{ "email": "usuario@ejemplo.com", "password": "mi_password_seguro" }
-
Login:
POST /login
{ "email": "usuario@ejemplo.com", "password": "mi_password_seguro" }
Respuesta: Cookie
access_token
configurada automáticamente -
Acceso a Rutas Protegidas: Las cookies se envían automáticamente
-
Refresh:
POST /refresh
- Renueva el token automáticamente -
Logout:
POST /logout
- Limpia las cookies
# Con Docker
docker-compose exec web poetry run pytest
# Local
poetry run pytest
# Con coverage
poetry run pytest --cov=src/
- ✅ Flujo completo de autenticación
- ✅ Registro de usuarios
- ✅ Login y logout
- ✅ Refresh de tokens
- ✅ Rutas protegidas
- ✅ Validación de errores
Crea un archivo .env
o configura las siguientes variables:
# Base de Datos
DATABASE_URL=postgresql://user:password@localhost:5432/fastapi_template_user
# JWT
SECRET_KEY=tu-clave-super-secreta-cambiar-en-produccion
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
# Entorno
ENVIRONMENT=development
DEBUG=true
Para producción, asegúrate de:
- Cambiar SECRET_KEY: Usa una clave segura y única
- Configurar HTTPS: Para cookies seguras
- Configurar CORS: Solo dominios permitidos
- Base de Datos Segura: Credentials seguras y conexión SSL
- Logs: Configurar logging apropiado
- web: Aplicación FastAPI
- db: PostgreSQL 13
- pgadmin: Administrador de BD (perfil admin)
# Levantar todos los servicios
docker-compose up -d
# Levantar con pgAdmin
docker-compose --profile admin up -d
# Ver logs
docker-compose logs -f web
# Acceder al contenedor
docker-compose exec web bash
# Rebuild
docker-compose build --no-cache
FastApiUserTemplate/
├── src/
│ └── fastapiusertemplate/
│ ├── __init__.py
│ ├── main.py # Aplicación principal
│ ├── models.py # Modelos SQLAlchemy
│ ├── schema.py # Esquemas Pydantic
│ ├── crud.py # Operaciones CRUD
│ ├── auth.py # Sistema de autenticación
│ └── database.py # Configuración de BD
├── tests/
│ ├── __init__.py
│ └── test_auth_flow.py # Tests de autenticación
├── docker-compose.yml # Orquestación de servicios
├── Dockerfile # Imagen de la aplicación
├── pyproject.toml # Configuración de Poetry
├── CONTRIBUTING.md # Guía de contribución
├── LICENSE # Licencia MIT
└── README.md # Este archivo
-
Instala Poetry: https://python-poetry.org/docs/#installation
-
Configura el entorno:
poetry install poetry shell
-
Pre-commit hooks (opcional):
poetry add --group dev pre-commit pre-commit install
# Formateo de código
poetry run black src/ tests/
# Ordenar imports
poetry run isort src/ tests/
# Linting
poetry run flake8 src/ tests/
# Type checking
poetry run mypy src/
¡Las contribuciones son bienvenidas! Por favor lee CONTRIBUTING.md para conocer el proceso.
- Fork del proyecto
- Crea tu feature branch (
git checkout -b feature/nueva-funcionalidad
) - Commit tus cambios (
git commit -m 'feat: añade nueva funcionalidad'
) - Push a la rama (
git push origin feature/nueva-funcionalidad
) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT - ver LICENSE para detalles.
- 📧 Issues: GitHub Issues
- 📚 Documentación: FastAPI Docs
- 💬 Discusiones: GitHub Discussions
- Documentación adicional
- FastAPI por el framework increíble
- Pydantic por la validación robusta
- SQLAlchemy por el ORM potente
- La comunidad de Python por las herramientas
¿Te gusta el proyecto? ⭐ ¡Dale una estrella en GitHub!
¿Encontraste un bug? 🐛 Reporta un issue
¿Quieres contribuir? 🚀 Lee la guía de contribución