Skip to content

Archivos de la Carpeta schemas

La carpeta src/schemas contiene los esquemas de validación de datos utilizando la librería Joi. Estos esquemas son la piedra angular para garantizar la integridad y la corrección de los datos que entran y salen de tu aplicación. Al definir reglas claras para cada campo, aseguras que solo la información bien estructurada y con los valores esperados sea procesada, lo que previene errores y vulnerabilidades.

auth.routes.ts

Este archivo define los esquemas de validación para las operaciones de autenticación de usuarios, como el inicio de sesión y el registro.

  • Descripción: Utiliza Joi para construir esquemas de validación reutilizables para email, password y role. Luego, combina estos esquemas más pequeños para crear esquemas completos para userLoginSchema (email y password) y userRegisterSchema (email, password y role), asegurando que los datos de entrada cumplan con las reglas predefinidas.

  • Propósito: Validar los datos de entrada para las operaciones de autenticación y registro. Esto es crucial para la seguridad, ya que evita que datos maliciosos o mal formados lleguen a la lógica de negocio o a la base de datos, y asegura que los usuarios proporcionen la información requerida en el formato correcto.

  • Funcionalidad:

    • allowedRolesArray: Un array que define explícitamente los roles válidos en la aplicación ("admin", "catcher", "editor", "visit"). Esto centraliza la definición de roles y facilita su mantenimiento.
    • emailSchema: Define un esquema para validar direcciones de correo electrónico. Requiere que sea una cadena, un formato de email válido, no vacío y obligatorio. Incluye mensajes de error personalizados.
    • passwordSchema: Define un esquema para validar contraseñas. Requiere que sea una cadena, con un mínimo de 6 caracteres, no vacío y obligatorio. También con mensajes de error personalizados.
    • roleSchema: Define un esquema para validar el rol de un usuario. Requiere que sea una cadena y que su valor esté limitado a los definidos en allowedRolesArray. Es obligatorio y tiene mensajes de error personalizados.
    • userLoginSchema: Un objeto Joi que combina emailSchema y passwordSchema para la validación de credenciales de inicio de sesión.
    • userRegisterSchema: Un objeto Joi que combina emailSchema, passwordSchema y roleSchema para la validación de datos de registro de nuevos usuarios.
  • Rol en la aplicación: Actúa como un filtro de calidad y seguridad para los datos de autenticación. Es la primera línea de defensa para la validación de entrada, garantizando que solo los datos que cumplen con los requisitos de la aplicación sean procesados, lo que reduce el riesgo de errores de lógica y ataques.

ts
import Joi from "joi"; // Importa la librería Joi para la validación de esquemas

// Define un array con los roles permitidos en la aplicación.
// Esto se usa para validar que el rol proporcionado sea uno de los valores esperados.
export const allowedRolesArray = ["admin", "catcher", "editor", "visit"];

// Define un esquema de validación para el correo electrónico.
const emailSchema = Joi.string() // Debe ser una cadena de texto.
  .email() // Debe tener formato de correo electrónico válido.
  .required() // Es un campo obligatorio.
  .messages({
    // Mensajes de error personalizados para diferentes fallos de validación.
    "string.email": "El formato del correo electrónico es inválido.",
    "string.empty": "El campo de correo electrónico no puede estar vacío.",
    "any.required": "El correo electrónico es obligatorio.",
  });

// Define un esquema de validación para la contraseña.
const passwordSchema = Joi.string() // Debe ser una cadena de texto.
  .min(6) // Debe tener un mínimo de 6 caracteres.
  .required() // Es un campo obligatorio.
  .messages({
    // Mensajes de error personalizados.
    "string.min": "La contraseña debe tener al menos 6 caracteres.",
    "string.empty": "El campo de contraseña no puede estar vacío.",
    "any.required": "La contraseña es obligatoria.",
  });

// Define un esquema de validación para el rol del usuario.
const roleSchema = Joi.string() // Debe ser una cadena de texto.
  .valid(...allowedRolesArray) // El valor debe ser uno de los definidos en 'allowedRolesArray'.
  .required() // Es un campo obligatorio.
  .messages({
    // Mensajes de error personalizados.
    "any.only": `El rol debe ser uno de los siguientes: ${allowedRolesArray.join(
      ", "
    )}.`, // Mensaje si el rol no es válido.
    "any.required": "El rol es obligatorio.",
    "string.empty": "El campo de rol no puede estar vacío.",
  });

// Exporta un esquema de validación para el inicio de sesión de usuario.
// Un objeto que requiere un 'email' (validado por emailSchema) y una 'password' (validada por passwordSchema).
export const userLoginSchema = Joi.object({
  email: emailSchema,
  password: passwordSchema,
});

// Exporta un esquema de validación para el registro de nuevos usuarios.
// Un objeto que requiere 'email', 'password' y 'role', cada uno validado por su esquema correspondiente.
export const userRegisterSchema = Joi.object({
  email: emailSchema,
  password: passwordSchema,
  role: roleSchema,
});