Este proyecto es una aplicación de autenticación que permite a los usuarios registrarse, iniciar sesión y acceder a recursos basados en roles. Utiliza PostgreSQL como base de datos.
- Registro de usuarios.
- Inicio de sesión de usuarios.
- Asignación de roles a usuarios.
- Protección de rutas basadas en roles.
- Generación de tokens JWT para autenticación.
- Generación de refresh token para una conexión fluida.
- Autenticación mediante proveedores (Google, Github).
- Backend: NestJS.
- Base de datos: PostgreSQL.
- Autenticación: JWT (JSON Web Tokens), Passport.
- Hashing de contraseñas: bcrypt.
- Envios de correos electrónicos: Nodemailer.
- CORS: Para el manejo de solicitudes entre dominios.
- Logger: Pino para el registro de logs.
- Contenedores: Docker para el despliegue y gestión de contenedores.
- Node.js (v14 o superior)
- PostgreSQL
- npm o yarn
- Docker (opcional, pero recomendado para el desarrollo y despliegue con contenedores)
- Clona el repositorio:
git clone https://github.com/JuanjoCodedev/auth-nest.git
- Instala las dependencias del proyecto:
npm install
- Configura la base de datos PostgreSQL y crea un archivo
.dev.env
en la raíz del proyecto con la siguiente configuración:
PORT=3000
HOSTDB=localhost
PORTDB=5432
USERNAMEDB=tu-usuario
PASSDB=tu-contraseña
DB=nombre-de-tu-base-de-datos
NODEMAILER_NAME=tu-marca
NODEMAILER_USER=email-remitente@example.com
NODEMAILER_PASS=tu-contraseña-app-google
GOOGLE_CLIENT_ID=tu-client-id-google
GOOGLE_CLIENT_SECRET=tu-client-secret-google
GOOGLE_CALLBACK_URL=http://localhost:3000/auth/google/callback
GITHUB_CLIENT_ID=tu-client-id-GITHUB
GITHUB_CLIENT_SECRET=tu-client-secret-GITHUB
GITHUB_CALLBACK_URL=http://localhost:3000/auth/github/callback
Si vas a utiizar Docker en vez de implementar:
HOSTDB=localhost
se recomienda utilizar:
HOSTDB=db
- Opción A: Ejecución con Docker
-
Asegúrate de tener Docker instalado en tu sistema. Puedes descargarlo desde Docker Hub.
-
Ejecuta el siguiente comando en la raíz del proyecto para construir y ejecutar los contenedores de Docker:
-
Crea un archivo .dev.env en la raíz del proyecto con la configuración de la base de datos y otras variables de entorno necesarias, si no lo haces no te podra ejecutar el comando correctamente (consulta los pasos de instalación #3 .dev.env sigue los pasos).
docker-compose up --build
Esto creará e iniciará los contenedores necesarios para ejecutar la aplicación, incluyendo la base de datos PostgreSQL y la interfaz de administración Adminer, para crear la tabla solo dirigete a la URL: localhost:8080.
- Opción B: Ejecución sin Docker
-
Asegúrate de tener PostgreSQL instalado y configurado en tu sistema.
-
Crea un archivo .dev.env en la raíz del proyecto con la configuración de la base de datos y otras variables de entorno necesarias (consulta los pasos de instalación #3 .dev.env sigue los pasos).
-
Inicia el servidor con el siguiente comando:
npm run start
- El servidor estará disponible en
http://localhost:3000
- URL:
auth/signUp
- Método:
POST
- Cuerpo:
{ "username": "nombre-de-usuario", "useremail": "correo@ejemplo.com", "userpassword": "123456789" }
-
URL:
auth/signIn
-
Método:
POST
-
Cuerpo:
{ "useremail": "correo@ejemplo.com", "userpassword": "123456789" }
-
URL:
auth/refreshtoken
-
Método:
POST
-
Cuerpo:
{ "refreshToken": "antiguo_token" }
Para refrescar el token desde el frontend, asegúrate de incluir el encabezado x-refresh-token con el valor del token de actualización (refresh token) en tu solicitud HTTP.
{ "x-refresh-token": "refreshToken" }
-
URL:
auth/sendPasswordReset
-
Método:
POST
-
Cuerpo:
{ "useremail": "correo@ejemplo.com" }
-
URL:
user/recoverPassword/:id
-
Método:
POST
-
Cuerpo:
{ "userpassword": "contraseña-nueva" }
-
URL:
auth/google
-
Método:
GET
-
Cuerpo: No aplica
-
URL:
auth/google/callback
-
Método:
GET
-
Cuerpo: No aplica
-
URL:
auth/github
-
Método:
GET
-
Cuerpo: No aplica
-
URL:
auth/github/callback
-
Método:
GET
-
Cuerpo: No aplica
Los roles pueden ser asignados a los usuarios y utilizados para proteger rutas específicas. Ejemplo de roles: admin
, member
.
@Auth(RoleEnum.ADMIN, RoleEnum.MEMBER)
@Post('recoverPassword/:id')
async recoverPassword(@Param('id') id: number, @Body() updatePassword: ValidateDto) {
return this.userService.recoverPassword(id, updatePassword);
}
El control de roles se realiza en el archivo src/shared/interfaces/user.interface.ts
. Este archivo define la interfaz de usuario y especifica los roles disponibles para asignar a los usuarios en la aplicación. Puedes modificar esta interfaz para agregar, eliminar o modificar roles según las necesidades de tu aplicación.
npm run start:dev
npm run build
npm run start:prod
-
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'
- Empuja tus cambios a la rama:
git push origin feature/nueva-caracteristica
- Abre un Pull Request en GitHub, describiendo los cambios propuestos.
- Refrescar Token: Los usuarios pueden refrescar su token de acceso cuando expire.
-
Actualización de contraseña Los usuarios pueden restablecer su contraseña enviando un email de verificación a su correo electronico.
-
Estructuración de archivos Se han realizados cambios en la estructura del proyecto.
-
Autenticación segura con múltiples proveedores: Permite a los usuarios iniciar sesión o registrarse utilizando sus cuentas de Google o Github.
-
Estructuración de archivos Se han realizados cambios en la estructura del proyecto.
-
Docker: Se ha implementado Docker para facilitar la creación de un entorno de desarrollo consistente y portátil. Sin embargo, esta característica está en fase experimental y puede requerir ajustes adicionales para un funcionamiento óptimo.
Este proyecto está licenciado bajo la Licencia MIT.