Login Seguro con Node.js y MongoDB: Parte 1 - Creando el Modelo de Usuario









Introducción

En este tutorial, aprenderemos cómo implementar un sistema de login seguro utilizando Node.js y MongoDB. A lo largo de esta serie de publicaciones, te guiaremos paso a paso en la construcción de un sistema de autenticación básico, siguiendo buenas prácticas de seguridad. En esta primera parte, comenzaremos con la creación del modelo de usuario en MongoDB, utilizando Mongoose, una popular librería de modelado de datos para Node.js.


Configuración Inicial

Antes de comenzar, asegurémonos de tener nuestro entorno de desarrollo listo. Si aún no tienes configurado un proyecto de Node.js con MongoDB, sigue estos pasos:

  1. Instalación de Node.js:

    • Dirígete a Node.js y descarga la versión LTS.
  2. Crear el proyecto:

    • Ejecuta el siguiente comando en tu terminal para crear un nuevo proyecto con npm, por ejemplo:
      mkdir sistema-login cd sistema-login npm init -y
  3. Instalar las dependencias:

    • Necesitaremos las siguientes dependencias para nuestro proyecto:

npm install express mongoose bcryptjs jsonwebtoken


 

Express: Un framework minimalista para crear aplicaciones web.

 Mongoose: Nos permitirá interactuar con MongoDB de manera sencilla.

 Bcrypt.js: Librería para cifrar contraseñas de forma segura.

                     jsonwebtoken: Permite crear token despues de iniciar sesion


Creando el Modelo de Usuario

El modelo de usuario es el corazón de nuestro sistema de autenticación. Este modelo representará la estructura de los datos del usuario dentro de nuestra base de datos MongoDB.

Código del modelo de usuario

El siguiente código define nuestro modelo de usuario en un archivo llamado User.js, se crean dentro de la carpeta models


// models/User.js
import mongoose from 'mongoose';

const userSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    trim: true //elimina espacios innecesarios
  },
  phone: {
    type: String,
    required: true,
  },
  email: {
    type: String,
    required: true,
    trim: true,
    unique: true,
    match: [/.+\@.+\..+/, 'Por favor ingresa un correo válido'] // Validación de formato de email
  },
  password: {
    type: String,
    required: true,
    minlength: 6 // Longitud mínima de la contraseña
  }
},
{
  timestamps: true
});

export default mongoose.model('User', userSchema);
 


Explicación del Código:

  • name: Almacena el nombre del usuario. Es un campo obligatorio y se utiliza la función trim para eliminar los espacios innecesarios.
  • phone: Representa el número de teléfono del usuario. También es un campo obligatorio.
  • email: Almacena el correo electrónico del usuario, y hemos especificado que debe ser único en la base de datos para evitar registros duplicados.
  • password: Almacena la contraseña del usuario, que luego se cifrará antes de ser guardada en la base de datos.
  • timestamps: Este atributo se utiliza para guardar automáticamente las fechas de creación y actualización del documento.

Mejores Prácticas para la Seguridad

A la hora de implementar un sistema de login, es fundamental seguir algunas buenas prácticas de seguridad:

  1. Cifrado de contraseñas: Nunca almacenes contraseñas en texto plano. Usaremos bcrypt.js para cifrar las contraseñas antes de almacenarlas en la base de datos, lo cual explicaremos en una futura publicación.

  2. Validación del correo electrónico: Asegúrate de que el campo de correo electrónico sea único y que tenga el formato correcto. Mongoose ya nos permite validar el correo con unique: true, pero también podemos usar paquetes como validator para validar el formato.

  3. Uso de HTTPS: Asegúrate de que todas las conexiones estén cifradas mediante HTTPS para proteger los datos durante la transmisión.

  4. Protección contra ataques de fuerza bruta: Implementar mecanismos como la limitación de intentos de login o el uso de CAPTCHAs puede prevenir ataques de fuerza bruta.


Próximos Pasos

Ya hemos definido el modelo de usuario y las buenas prácticas de seguridad básicas. En la siguiente parte de este tutorial, nos enfocaremos en:

  • Cifrar las contraseñas antes de almacenarlas en la base de datos.
  • Implementar las rutas para el registro y el login de usuarios.

¡Sigue atento a la siguiente entrega!


Conclusión

En este primer paso, hemos aprendido cómo crear un modelo de usuario usando Mongoose en un proyecto de Node.js. Este modelo nos permitirá gestionar la información básica de los usuarios en nuestra base de datos MongoDB. A lo largo de esta serie de publicaciones, iremos ampliando esta base para implementar un sistema de login completamente funcional y seguro.

Comentarios