Skip to content

JuanjoCodedev/auth-nest

Repository files navigation

NestJS Logo     JWT Logo     JWT Logo

Autenticación con permisos

Este proyecto es una aplicación de autenticación que permite a los usuarios registrarse, iniciar sesión y acceder a recursos basados en permisos específicos, utilizando PostgreSQL como base de datos.

📋 Características del Proyecto

Característica Descripción
🧾 Registro de usuarios Los usuarios pueden crear una cuenta en el sistema.
🔐 Inicio de sesión seguro Acceso mediante credenciales con notificación por correo si se detecta un inicio de sesión inusual.
🔁 Recuperación y actualización de contraseña Soporte para restablecer contraseña automáticamente o manualmente mediante un enlace enviado por email.
📚 Administración dinámica de rutas El frontend gestiona rutas activas por rol mediante switches, enviando el array completo al backend.
🚧 Protección de rutas Acceso restringido a rutas según los permisos asignados al usuario o al rol que tiene asignado.
🎭 Control de acceso basado en roles Se permite o deniega el acceso a rutas específicas según el rol del usuario (admin, editor, etc).
🔑 Autenticación JWT Implementación de JSON Web Tokens para validar sesiones de usuario de manera segura.
♻️ Tokens de renovación (refresh tokens) Permite mantener la sesión activa sin necesidad de reautenticación frecuente.
🌐 Autenticación social Inicio de sesión o registro mediante cuentas de Google o Microsoft.

🗺️ Diagrama de Base de Datos

Puedes visualizar el modelo de datos utilizado por el proyecto en el siguiente enlace:

🔗 Ver diagrama en dbdiagram.io

⚙️ Requisitos Previos

Requisito Descripción
🟢 Node.js Versión 14 o superior (preferiblemente v16 o v18 para mejor compatibilidad).
🛢️ PostgreSQL Sistema de base de datos relacional utilizado para persistencia.
📦 npm o yarn Gestores de paquetes para instalar las dependencias del proyecto.
🐳 Docker (opcional) Recomendado para el desarrollo local y despliegue en contenedores.

🚀 Instalación

  1. Clona el repositorio:
git clone https://github.com/JuanjoCodedev/auth-nest.git
  1. Configura la base de datos PostgreSQL y crea un archivo .dev.env en la raíz del proyecto con la siguiente configuración:
NODE_ENV=development # o production

PORT=3000
HOST_DATABASE=localhost
POSTGRES_PORT=5432
POSTGRES_USER=tu-usuario
POSTGRES_PASSWORD=tu-contraseña
DATABASE=nombre-de-tu-base-de-datos

SECRET_KEY=clave-secreta
EXPIRED_TOKEN=1h
EXPIRED_REFRESH_TOKEN=7d

GOOGLE_CLIENT_ID=tu-client-id-google
GOOGLE_CLIENT_SECRET=tu-client-secret-google
GOOGLE_CALLBACK_URL=http://localhost:3000/auth/google/redirect

💡 Observación

Si vas a utilizar Docker, cambia la línea:

HOST_DATABASE=localhost

por:

HOST_DATABASE=db

Nota: Reemplaza los valores del archivo .dev.env por los mismos utilizados en tu archivo docker-compose.yml. Ejemplo:

HOST_DATABASE=db
POSTGRES_PORT=5432
POSTGRES_USER=root
POSTGRES_PASSWORD=root
DATABASE=root

⚙️ Ejecución de la API

Opción A: Con Docker

  • Asegúrate de tener Docker instalado en tu sistema.
  • Verifica que tengas un archivo .dev.env con la configuración adecuada (ver pasos anteriores).
  • Luego ejecuta:
docker-compose up --build

Esto iniciará la aplicación, la base de datos PostgreSQL y accede a Adminer desde:

http://localhost:8080

Opción B: Sin Docker

  • Asegúrate de tener PostgreSQL instalado y configurado correctamente.
  • Crea tu archivo .dev.env como se explicó anteriormente.
  • Instala las dependencias:
npm install
  • Ejecuta el servidor en modo build para pruebas de correo:
npm run build-and-start
  • O en modo desarrollo:
npm run start:dev

El servidor estará disponible en http://localhost:3000 tambien puedes ingesar http://localhost:3000/api para el uso de Swagger.


📬 Endpoints Principales

Nombre Ruta Método Cuerpo de Ejemplo
Iniciar sesión /auth/sign-in POST { "email": "[email protected]", "password": "123456789" }
Crear cuenta /auth/signUp POST { "name": "usuario", "email": "[email protected]", "password": "123456789" }
Actualizar estado /user/:id PUT Ninguno
Actualizar perfil /user/profile/:id PATCH { "name": "usuario", "email": "[email protected]", "password": "123456789" }
Registrar Rol /role POST { "name": "client" }
Asignar permiso a usuario por ruta /user-route-access POST { "user_id": 3, "routes": ["user/:id", "user/profile/:id"] }
Asignar permiso al rol /role-route-access POST { "role_id": 3, "routes": ["user/:id", "user/profile/:id"] }

🧪 Pruebas

Puedes ejecutar las pruebas end-to-end con:

npm run test:e2e

🤝 Contribución

  1. Haz un fork del repositorio.

  2. Crea una nueva rama:

git checkout -b feature/nueva-caracteristica
  1. Realiza tus cambios y haz commit:
git commit -am "Añadir nueva característica"
  1. Sube tus cambios:
git push origin feature/nueva-caracteristica

📄 Licencia

Este proyecto está bajo la licencia MIT. Consulta el archivo LICENSE para más detalles.


👥 Créditos

Desarrollado por JuanjoCodedev

About

🚀 Sistema de autenticación con Google y extensión de sesión con refresh tokens. 🧑‍🚀

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •