Skip to content

sebsolezzi88/fastapi-jwt-auth-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📝 Task Manager API

REST API para gestión de tareas con autenticación JWT, construida con FastAPI, SQLModel y SQLite.


🚀 Tecnologías

  • FastAPI — Framework web moderno y de alto rendimiento
  • SQLModel — ORM basado en SQLAlchemy + Pydantic
  • SQLite — Base de datos ligera (archivo database.db)
  • bcrypt — Hashing seguro de contraseñas
  • PyJWT — Generación y validación de tokens JWT

📁 Estructura del proyecto

├── main.py               # Entrada de la aplicación
├── database.py           # Configuración de la DB y sesión
├── segurity.py           # Hashing, JWT y autenticación
├── models/
│   ├── user.py           # Modelo SQLModel - User
│   └── task.py           # Modelo SQLModel - Task
├── schemas/
│   ├── user.py           # Schemas Pydantic - User
│   └── task.py           # Schemas Pydantic - Task
├── routes/
│   ├── user.py           # Rutas /user
│   └── task.py           # Rutas /task
└── .env                  # Variables de entorno

⚙️ Instalación y configuración

1. Clonar el repositorio

git clone <url-del-repo>
cd <nombre-del-proyecto>

2. Crear y activar entorno virtual

python -m venv venv
source venv/bin/activate       # Linux/Mac
venv\Scripts\activate          # Windows

3. Instalar dependencias

pip install fastapi uvicorn sqlmodel bcrypt pyjwt python-dotenv

4. Configurar variables de entorno

Crear un archivo .env en la raíz del proyecto:

SECRET_KEY=tu_clave_secreta_muy_segura

5. Ejecutar el servidor

uvicorn main:app --reload

La API estará disponible en http://localhost:8000.
Documentación interactiva en http://localhost:8000/docs.


🔐 Autenticación

La API utiliza JWT Bearer Tokens. El flujo es el siguiente:

  1. Registrar un usuario en POST /user/create
  2. Iniciar sesión en POST /user/login para obtener el token
  3. Incluir el token en las requests protegidas:
Authorization: Bearer <token>

Los tokens expiran a los 30 minutos.


📌 Endpoints

Usuario — /user

Método Ruta Descripción Auth requerida
POST /user/create Registrar nuevo usuario
POST /user/login Iniciar sesión y obtener token

POST /user/create

// Body
{
  "username": "juanperez",
  "password": "mipass123",
  "password_repeat": "mipass123"
}

// Response 200
{
  "msg": "usuario creado",
  "id": 1
}

POST /user/login

// Body
{
  "username": "juanperez",
  "password": "mipass123"
}

// Response 200
{
  "msg": "Log success",
  "token": "<jwt_token>"
}

Tareas — /task

Todos los endpoints de tareas requieren autenticación. Cada usuario solo puede ver y gestionar sus propias tareas.

Método Ruta Descripción Auth requerida
POST /task/ Crear nueva tarea
GET /task/ Obtener todas las tareas del usuario
PATCH /task/{id_task} Alternar estado de la tarea (pending ↔ complete)
DELETE /task/{id_task} Eliminar una tarea

POST /task/

// Body
{
  "title": "Mi tarea",
  "description": "Descripción detallada de la tarea"
}

// Response 201
{
  "status": "success",
  "message": "Tarea creada exitosamente",
  "task": {
    "id": 1,
    "title": "Mi tarea",
    "description": "Descripción detallada de la tarea",
    "status": "pending",
    "created_at": "2024-01-01T00:00:00",
    "user_id": 1
  }
}

GET /task/

// Response 200
{
  "tasks": [
    {
      "id": 1,
      "title": "Mi tarea",
      "description": "Descripción detallada de la tarea",
      "status": "pending",
      "created_at": "2024-01-01T00:00:00",
      "user_id": 1
    }
  ]
}

PATCH /task/{id_task}

Alterna el estado de la tarea entre pending y complete.

// Response 200
{
  "task": {
    "id": 1,
    "status": "complete",
    ...
  }
}

DELETE /task/{id_task}

// Response 200
{
  "msg": "Task deleted successfully"
}

🗄️ Modelos de base de datos

User

Campo Tipo Descripción
id Integer (PK) ID autogenerado
username String (único) Nombre de usuario
password String Contraseña hasheada con bcrypt

Task

Campo Tipo Descripción
id Integer (PK) ID autogenerado
title String (max 20) Título de la tarea
description String (max 50) Descripción de la tarea
status String Estado: pending o complete
created_at DateTime Fecha de creación (UTC)
user_id Integer (FK) Referencia al usuario dueño

🔒 Validaciones

  • username: mínimo 6 caracteres, máximo 20
  • password: mínimo 6 caracteres, máximo 20
  • title: mínimo 6 caracteres, máximo 20
  • description: mínimo 10 caracteres, máximo 100
  • Las contraseñas deben coincidir al registrarse
  • No se pueden registrar dos usuarios con el mismo username
  • Un usuario no puede modificar ni eliminar tareas de otros usuarios

About

Backend API para gestión de tareas personales. Autenticación JWT, rutas protegidas y base de datos SQLite con SQLModel.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages