Talleres pasados

Crea tu propia API-REST desde cero con NodeJs y Express – Parte 2

Jueves 17 de Agosto de 2023

En nuestra segunda sesión, daremos un paso más allá y exploraremos cómo conectar nuestra API con una base de datos. Pero eso no es todo, también aprenderás a utilizar JWT para la autenticación.

¡Revive el taller online!

Resumen

En esta segunda parte del taller de creación de una API REST, vamos a enfocarnos en conectar nuestra aplicación a una base de datos y gestionar la autenticación de usuarios. En la primera parte, levantamos un servidor con Express y configuramos aspectos básicos como el puerto y el logging. Ahora, vamos a profundizar en la gestión de datos y la autenticación.

Conexión a la base de datos

Primero, vamos a configurar la conexión a una base de datos no relacional, en este caso MongoDB. Utilizaremos Mongoose para manejar la conexión y los esquemas de nuestros datos. La elección de una base de datos no relacional como MongoDB se debe a su flexibilidad y facilidad de uso con JavaScript.

Configuración del servidor

Vamos a comenzar revisando la configuración del servidor y cómo hemos estructurado nuestra aplicación:

  1. Variables de entorno: Configuramos las variables de entorno para almacenar datos sensibles como las credenciales de la base de datos.
  2. Conexión a MongoDB: Utilizamos Mongoose para conectar nuestra aplicación a MongoDB, definiendo el esquema de nuestros datos y creando modelos para interactuar con la base de datos.

Definición de modelos

Creamos un modelo para los usuarios, definiendo los campos necesarios como nombre, correo electrónico y contraseña. Mongoose nos permite validar y estructurar nuestros datos de manera sencilla.

const userSchema = new mongoose.Schema({
  name: { type: String, required: true, trim: true },
  email: { type: String, required: true, trim: true, unique: true },
  password: { type: String, required: true, trim: true }
});

Autenticación de usuarios

Para la autenticación, utilizamos bcrypt para encriptar las contraseñas y JSON Web Tokens (JWT) para manejar las sesiones de usuario. Estos son los pasos básicos:

  1. Encriptación de contraseñas: Utilizamos bcrypt para encriptar las contraseñas antes de guardarlas en la base de datos.
  2. Generación de tokens: Utilizamos JWT para generar tokens de sesión que serán utilizados para autenticar a los usuarios en cada petición.
  3. Verificación de tokens: Creamos middleware para verificar la validez de los tokens en cada solicitud protegida.

Creación y autenticación de usuarios

Definimos rutas en nuestra aplicación para manejar la creación de usuarios y su autenticación:

  1. Registro de usuarios: Creamos una ruta POST para registrar nuevos usuarios, encriptando sus contraseñas y guardando sus datos en la base de datos.
  2. Inicio de sesión: Creamos una ruta POST para que los usuarios inicien sesión, verificando sus credenciales y generando un token de sesión.

Middleware de autenticación

Para proteger nuestras rutas, utilizamos un middleware que verifica la validez del token JWT antes de permitir el acceso a ciertas rutas. Esto asegura que solo los usuarios autenticados puedan acceder a datos sensibles.

const authenticateToken = (req, res, next) => {
  const token = req.header('Authorization');
  if (!token) return res.status(401).send('Access Denied');
  try {
    const verified = jwt.verify(token, process.env.JWT_SECRET);
    req.user = verified;
    next();
  } catch (err) {
    res.status(400).send('Invalid Token');
  }
};

Conclusión

En este taller, hemos avanzado en la creación de nuestra API REST, conectando la aplicación a una base de datos y gestionando la autenticación de usuarios. Hemos utilizado herramientas y librerías comunes en el desarrollo de aplicaciones web modernas, asegurando la seguridad y eficiencia de nuestra aplicación. Para más detalles y ejemplos, puedes revisar el repositorio que hemos compartido.

Este taller es una excelente base para desarrollar aplicaciones más complejas y seguras, aprovechando las ventajas de MongoDB, Express y la autenticación basada en tokens. ¡Continúa explorando y mejorando tus habilidades de desarrollo!

Participantes

Ponente:

Desarrollador de software, amante de sistemas basados en GNU/Linux y apasionado del mundo Maker, de la impresión 3D y la electrónica

También te puede interesar...

Jueves 14 de Mayo
Cloud, desarrollo & DevOps
Jueves 12 de Marzo
Cloud, desarrollo & DevOps
Jueves 16 de Abril
Cloud, desarrollo & DevOps
Jueves 9 de Abril
Cloud, desarrollo & DevOps
Entérate de nuestros próximos talleres
Suscríbete a nuestro newsletter para recibir nuestras novedades.
Talleres nuevos todas las semanas.
Recibe nuestras novedades para no perderte ninguno.