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:
- Variables de entorno: Configuramos las variables de entorno para almacenar datos sensibles como las credenciales de la base de datos.
- 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:
- Encriptación de contraseñas: Utilizamos bcrypt para encriptar las contraseñas antes de guardarlas en la base de datos.
- 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.
- 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:
- Registro de usuarios: Creamos una ruta POST para registrar nuevos usuarios, encriptando sus contraseñas y guardando sus datos en la base de datos.
- 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!