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í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. |
Puedes visualizar el modelo de datos utilizado por el proyecto en el siguiente enlace:
🔗 Ver diagrama en dbdiagram.io
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. |
- Clona el repositorio:
git clone https://github.com/JuanjoCodedev/auth-nest.git
- 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
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
- 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
- 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
.
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"] } |
Puedes ejecutar las pruebas end-to-end con:
npm run test:e2e
-
Haz un fork del repositorio.
-
Crea una nueva rama:
git checkout -b feature/nueva-caracteristica
- Realiza tus cambios y haz commit:
git commit -am "Añadir nueva característica"
- Sube tus cambios:
git push origin feature/nueva-caracteristica
Este proyecto está bajo la licencia MIT. Consulta el archivo LICENSE para más detalles.
Desarrollado por JuanjoCodedev