User Management con Node.js/ Mongo DB y Typescript

User Management con Node.js/ Mongo DB y Typescript

Tener un usuario y contraseña es prácticamente indispensable en el mundo digital. Con una gran cantidad de usuarios registrándose, termina siendo necesario tener un sistema de gestión de usuarios, es decir, algo que almacene datos y al mismo tiempo garantice que las contraseñas sean correctas y seguras.

Por ello, varias empresas acaban añadiendo un sistema asociado, lo que hace que tener un proyecto de este tipo sea muy ventajoso. Aquí hablaremos más sobre qué es la Gestión de Usuarios o User Management.


User Management


User Management es una función que nació con el objetivo de organizar a los usuarios y cambiar los permisos y la información de cada uno. Estas funciones son cada vez más avanzadas y, en comparación con los viejos tiempos, son mucho más seguras con servicios de prueba y autenticación de extremo a extremo.

En este artículo, hablaremos un poco sobre la gestión de usuarios, al tiempo que veremos en la práctica cómo crear una aplicación con Node.js, Typescript y MongoDB.


¿Cuáles funciones crear en el manejo de usuarios?


Los usuarios están acostumbrados a utilizar este sistema de registro e inicio de sesión en su vida diaria. Es decir, el acto de registrarse e iniciar sesión en su cuenta debe ser algo simple y rápido.

Este sistema suele tener funciones de almacenar información del usuario, tener un sistema de autenticación seguro, permitir cambios de contraseña y tener autenticación de dos factores.


Conceptos importantes


Uno de los conceptos más importantes es el de los roles de usuario o User Roles. Lleva la idea de que los usuarios pueden dividirse en diferentes áreas de la empresa con permisos en función de sus actividades, permisos de visitante o de administrador. Es importante entender que la persona que definirá estas reglas es una persona/empresa cuyo proyecto necesita ser organizado por los usuarios.

Otro concepto esencial para organizar a los usuarios es el Perfil de Usuario o User Profile, debemos crear una colección de información del usuario con datos como contraseña (encriptada), inicio de sesión, correo electrónico, entre otra información que necesita la aplicación.


Crear el backend para el manejo de usuarios

Antes de crear los directorios del proyecto, debemos entender la estructura del backend y cómo funcionará la comunicación entre los componentes creados.

Observa la simplificación abajo.

Observando la imagen de arriba, podemos ver que, normalmente, el registro y la entrada de usuarios son activados por el frontend. Sin embargo, en este artículo el enfoque estará en el backend de la aplicación, es decir, la parte responsable de comunicarse con la base de datos y de garantizar que el usuario esté autenticado.


Setup inicial de un proyecto Typescript y MongoDB


Antes de comenzar a escribir código, crearemos el directorio principal de nuestro proyecto e instalaremos las dependencias.


mkdir manage-users

cd manage-users

mkdir backend

cd backend

npm init -y

npm install -D typescript

npx tsx –init

El último comando utilizado es necesario para crear el archivo de configuración de Typescript. Luego de ser creado, podemos dejarlo así:

/manage-users/backend/tsconfig.json


npm install @typegoose/typegoose

npm install bcryptjs

npm install config

npm install cookie-parser

npm install dotenv

npm install express

npm install jsonwebtoken

npm install lodash

npm install mongoose

npm install redis

npm install ts-node-dev

npm install zod

npm install cors

Con las dependencias instaladas, podemos crear el archivo principal para iniciar la aplicación backend app.ts. Este archivo será responsable de iniciar el servidor y consumir los puntos finales de URL que activarán las funciones de backend. Además, también llama a la función que conecta el servidor a la base de datos.


mkdir src

cd src

touch app.ts

/manage-users/backend/src/app.ts


En el archivo anterior usamos algo llamado variables de entorno. Se almacenan en el archivo .env y se pueden crear de esta manera:

/manage-users/backend/.env


Vamos a crear el archivo de conexión de la base de datos. Este archivo obtendrá las variables de entorno de tu banco para realizar la conexión.

/manage-users/backend/Models/Connect.ts


Luego crearemos el archivo de conexión del servidor Redis, un framework que facilita la creación de un sistema de gestión de usuarios muy utilizado para almacenar la estructura de datos.

/manage-users/backend/Models/ConnectRedis.ts


Y en el último archivo de la carpeta Models se creará el archivo userModel.ts, archivo que creará la parte de la base de datos que almacenará los datos de los usuarios registrados.

/manage-users/backend/Models/userModel.ts


Con eso, podemos comenzar a crear los servicios de la aplicación, la parte que se comunica de manera efectiva entre la base de datos y la aplicación. En este archivo, haremos la parte de autenticación del token, algo que se puede ejemplificar mejor en la siguiente imagen:


JWT es responsable de cifrar tu contraseña, garantizando la seguridad de sus datos y permitiéndonos verificar que dicha contraseña es correcta, de acuerdo con la información almacenada en la base de datos.

/manage-users/backend/utils/Jwt.ts


Con eso, podemos crear el archivo de servicios. En él realizaremos las funciones de crear un usuario, encontrarlo por id, visualizar todos los usuarios y registrar el token jwt.


Finalizando los servicios, podemos pasar a los Controllers, la parte encargada de trabajar con las solicitudes y respuestas. En él configuraremos las funciones que se utilizarán en el endpoint a futuro.

/manage-users/backend/Controllers/userController.ts


/manage-users/backend/Controllers/authController.ts


En el controller utilizado anteriormente, utilizamos una función encargada de disparar un error (esta función sigue aquí):

/manage-users/backend/utils/ErrorResponse.ts


Después de que casi hayamos completado la arquitectura del software, podemos crear las rutas que usamos en el archivo app.ts creado inicialmente. Los archivos de ruta son donde definimos el endpoint de cada solicitud.

/manage-users/backend/routes/userRoute.ts

/manage-users/backend/routes/authRoute.ts


Finalmente, podemos cambiar nuestro package.json y finalmente probar nuestra aplicación. Dentro del package.json, cambia la clave del script a esto:


Ahora simplemente ejecute el comando y pruebe las rutas creadas anteriormente. Recomiendo usar la extensión VS Code Thunder Client.

npm start


Deberías ver un mensaje así:

Server started on port: 8000

Redis client connected...

Database connected...

Conclusión

Comprender cómo funciona la administración de usuarios es importante para cualquier desarrollador de backend, pero es importante recordar que, hoy en día, la mayoría de los servicios que necesitan autenticación terminan subcontratando el trabajo al permitir que los usuarios usen sus cuentas de Google o GitHub, lo que hace la vida del usuario mucho más fácil.

Entiendo que el desarrollo de este sistema es más útil para las empresas que buscan controlar y organizar a los empleados de su empresa de una manera más asertiva.

¡Hasta luego!

💡
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Listopro.

Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.