Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Middleware de verificación

4/20
Recursos

Aportes 4

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

RECORDAR que cuando se hacen cambios en las variables de entorno se debe reiniciar el servidor para que se apliquen esos cambios

recordemos hacer nuestras validaciones estilos first error, es una buena practica

ejemplo de mi codigo:

const boom = require('@hapi/boom'),
      config = require('./../config/config')

class Auth {

  static chackApiKey(req, res, next) {
    const apiKey = req.headers['api'];
    if (!apiKey) {
      return next(boom.unauthorized('Unauthorized'));
    }
    if (apiKey !== config.apiKey) {
      return next(boom.unauthorized('Unauthorized'));
    }
    return next();
  }
}

module.exports = Auth;

Se crea un middleware para hacer verificaciones. es decir, una capa de autenticación.

El middleware tendrá al siguiente lógica:

if (req.headers['api'] === '123') {
  next();
} else {
  next(boom.unauthorized());
}

Es decir, en los headers se enviará una api con un valor (api key) que deberá ser igual a un valor o una variable que esté manejada por las variables de entorno. Si todo es correcto hará next(), es decir, dejamos que ingrese a la capa de servicios o ejecutar los siguientes middlewares, de lo contrario arrojará un error unauthorized.

Para ello se crea el siguiente middleware auth.handler.js:

const boom = require('@hapi/boom');
const { config } = require('./../config/config');

function checkApiKey(req, res, next) {
  const apiKey = req.headers['api'];
  if (apiKey === config.apiKey) {
    next();
  } else {
    next(boom.unauthorized());
  }
}

module.exports = { checkApiKey };

La apiKey viene de los headers con el nombre de api. Como buena practica, la API Key que configuremos estará en el archivo de variables de entorno .env:

PORT=3000
DATABASE_URL='postgres://john:[email protected]:5432/my_store'
API_KEY=321456

Posteriormente se agrega al archivo config/config.js para poder leerla y permitir que cualquier cliente se conecte a nuestra aplicación desde maquina a maquina:

require('dotenv').config();

const config = {
  env: process.env.NODE_ENV || 'dev',
  isProd: process.env.NODE_ENV === 'production',
  port: process.env.PORT || 3000,
  dbUrl: process.env.DATABASE_URL,
  apiKey: process.env.API_KEY,
};

module.exports = { config };

Esta clase es una obra maestra