Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

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

License

NotificationsYou must be signed in to change notification settings

JuanjoCodedev/auth-nest

Repository files navigation

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 con permisos especificos. Utiliza PostgreSQL como base de datos.

Características

  • Permite a los usuarios crear una cuenta en el sistema.
  • Los usuarios pueden iniciar sesión en la aplicación utilizando sus credenciales con notificación por correo electrónico para accesos desde dispositivos diferentes a los habituales.
  • Actualización de contraseña con generación automática y opción de actualización manual a través de un enlace en el correo electrónico.
  • Permite asignar roles específicos a los usuarios para gestionar sus permisos y acceso dentro de la aplicación.
  • Las rutas de la aplicación están protegidas según el rol del usuario y el permiso que este tenga, asegurando que solo los usuarios con permisos adecuados puedan acceder a ciertas áreas.
  • Utiliza JSON Web Tokens (JWT) para la autenticación segura de usuarios.
  • Implementa refresh tokens para mantener la sesión activa y permitir una conexión fluida sin necesidad de reautenticación constante.
  • Permite a los usuarios iniciar sesión o registrarse utilizando sus cuentas de Google o Github para una experiencia de autenticación más conveniente.
  • Utiliza Handlebars para generar plantillas de correo electrónico dinámicas, facilitando el envío de correos personalizados y bien formateados.

Tecnologías Utilizadas

  • Backend: NestJS.
  • Base de datos: PostgreSQL.
  • Autenticación: JWT (JSON Web Tokens), Passport.
  • Hashing de contraseñas: bcrypt.
  • Envios de correos electrónicos: Mailer.
  • CORS: Para el manejo de solicitudes entre dominios.
  • Plantillas de correo electrónico: Handlebars.
  • Contenedores: Docker para el despliegue y gestión de contenedores.
  • Documentación de API: Swagger para la generación de documentación de API.

Requisitos Previos

  • Node.js (v14 o superior)
  • PostgreSQL
  • npm o yarn
  • Docker (opcional, pero recomendado para el desarrollo y despliegue con 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=modo-de-trabajo development | productionLOG_LEVEL=debug | infoPORT=3000HOST_DATABASE_DEVELOPMENT=localhostPOSTGRES_PORT_DEVELOPMENT=5432POSTGRES_USER_DEVELOPMENT=tu-usuarioPOSTGRES_PASSWORD_DEVELOPMENT=tu-contraseñaDATABASE_DEVELOPMENT=nombre-de-tu-base-de-datosHOST_DATABASE_PRODUCTION=localhostPOSTGRES_PORT_PRODUCTION=5432POSTGRES_USER_PRODUCTION=tu-usuarioPOSTGRES_PASSWORD_PRODUCTION=tu-contraseñaDATABASE_PRODUCTION=nombre-de-tu-base-de-datosSECRET_KEY=SECRET_KEYEXPIRED_TOKEN=tiempo-expiracion-del-tokenEXPIRED_REFRESH_TOKEN=tiempo-expiracion-del-refresh-tokenMAILER_HOST=smtp.gmail.comMAILER_PORT=465MAILER_SECURE=trueMAILER_NAME=tu-marcaMAILER_USER=email-remitente@example.comMAILER_PASS=tu-contraseña-app-googleGOOGLE_CLIENT_ID=tu-client-id-googleGOOGLE_CLIENT_SECRET=tu-client-secret-googleGOOGLE_CALLBACK_URL=http://localhost:3000/auth/google/callbackGITHUB_CLIENT_ID=tu-client-id-GITHUBGITHUB_CLIENT_SECRET=tu-client-secret-GITHUBGITHUB_CALLBACK_URL=http://localhost:3000/auth/github/callback

Observación

Si vas a utiizar Docker en vez de implementar:

HOST_DATABASE=localhost

se recomienda utilizar:

HOST_DATABASE_DEVELOPMENT=db

Nota: remplace las variables de entorno del archivo.dev.env por las credenciales colocadas en sudocker-compose:

HOST_DATABASE_DEVELOPMENT=dbPOSTGRES_PORT_DEVELOPMENT=5432POSTGRES_USER_DEVELOPMENT=rootPOSTGRES_PASSWORD_DEVELOPMENT=rootDATABASE_DEVELOPMENT=root

Uso

  1. Opción A: Ejecución con Docker
  • Asegúrate de tener Docker instalado en tu sistema. Puedes descargarlo desde Docker Hub.

  • 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 #2 .dev.env sigue los pasos).

  • Ejecuta el siguiente comando en la raíz del proyecto para construir y ejecutar los contenedores de Docker:

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 laURL: localhost:8080.

  1. 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 #2 .dev.env sigue los pasos).

  • Instala las dependencias del proyecto:

npm install
  • Inicia el servidor con el siguiente comando para probar el envio de correo electronicos en desarrollo:
npm run build-and-start
  • Inicia el servidor con el siguiente comando para desarrollo:
npm run start:dev
  1. El servidor estará disponible enhttp://localhost:3000 tambien puedes ingesarhttp://localhost:3000/api para el uso de Swagger.

Endpoints

Registro de Usuario

  • URL:sign-up/signUp
  • Método:POST
  • Cuerpo:
    {"name":"nombre-de-usuario","email":"correo@ejemplo.com","password":"123456789"}

Inicio de Sesión

  • URL:sign-in/signIn

  • Método:POST

  • Cuerpo:

    {"email":"correo@ejemplo.com","password":"123456789"}

    Refrescar Token

  • URL:token/refreshToken

  • Método:POST

  • Cuerpo:

    {"refreshToken":"antiguo_token"}

    Observación

    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"}

Enviar token por correo electrónico

  • URL:reset-password/sendPasswordReset

  • Método:POST

  • Cuerpo:

    {"email":"correo@ejemplo.com"}

Actualizar contraseña

  • URL:user/recoverPassword/:id

  • Método:POST

  • Cuerpo:

    {"password":"contraseña-nueva"}

Validación con Google

  • URL:with-provider/google

  • Método:GET

  • Cuerpo: No aplica

  • URL:with-provider/google/callback

  • Método:GET

  • Cuerpo: No aplica

Validación con Github

  • URL:with-provider/github

  • Método:GET

  • Cuerpo: No aplica

  • URL:with-provider/github/callback

  • Método:GET

  • Cuerpo: No aplica

Roles

Los roles pueden ser asignados a los usuarios y utilizados para proteger rutas específicas. Además podras asignar permisos a roles especificos. Ejemplo de roles:admin,member.

@Auth()@Post('recoverPassword/:id')asyncrecoverPassword(@Param('id')id: number, @Body()updatePassword:UpdatePasswordDto){returnthis.userService.recoverPassword(id,updatePassword);}

En ese ejemplo, se importa el decorador@Auth() que se encargara de validar si la persona tiene asigando un rol y si ese rol tiene permiso para acceder a esa ruta.

Registrar nuevo Rol

  • URL:roles/newRol

  • Método:POST

  • Cuerpo:

    {"name":"deve"}

Registrar nuevo Permiso

  • URL:permissions/newPermission

  • Método:POST

  • Cuerpo:

    {"route":"/user/profile/:id"}

Asignar permiso a Rol

  • URL:rp/newrp

  • Método:POST

  • Cuerpo:

    {"id_rol":1,"id_permissions":1}

Desarrollo

Ejecución de la Aplicación en Desarrollo

npm run build-and-start

Compilación y Ejecución en Producción

npm run buildnpm run start:prod

Diagrama de Flujo

Diagrama ER

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. Empuja tus cambios a la rama:
git push origin feature/nueva-caracteristica
  1. Abre un Pull Request en GitHub, describiendo los cambios propuestos.

Lincencia

Este proyecto está licenciado bajo la Licencia MIT.

About

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

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp