Caso Real: Middleware de Autenticación para Administradores

Planteamiento del Problema

Necesitas proteger rutas administrativas para que solo usuarios con permisos de admin puedan acceder.

Para este caso, necesitas crear un middleware personalizado que verifique si el usuario es administrador isAdmin antes de permitir el acceso a rutas protegidas.

Flujo:

bash
Petición → Middleware → ¿isAdmin = true? → SÍ → Ruta Admin
                                      → NO → Error 403

Código Completo

javascript
const express = require('express');
const app = express();

// Middleware de admin
function verificarAdmin(req, res, next) {
  if (req.query.isAdmin === 'true') {
      next(); // Continuar
  } else {
      res.status(403).json({ error: 'Acceso denegado' });
  }
}

// Ruta pública
app.get('/', (req, res) => {
  res.json({ mensaje: 'Página pública' });
});

// Ruta protegida
app.get('/admin', verificarAdmin, (req, res) => {
  res.json({ mensaje: 'Panel admin' });
});

app.listen(3000);

Cómo Funciona

El middleware intercepta la petición, verifica el parámetro isAdmin y decide si continuar o bloquear el acceso. Si encuentra isAdmin=true ejecuta next(), caso contrario devuelve error 403.

1. El Middleware:

javascript
function verificarAdmin(req, res, next) {
  const isAdmin = req.query.isAdmin === 'true' || 
                 req.body?.isAdmin === true;
  
  if (isAdmin) {
      next(); // ✅ Continuar
  } else {
      res.status(403); // ❌ Bloquear
  }
}

2. Proteger Rutas:

javascript
// Sin protección
app.get('/publico', handler);

// Con protección
app.get('/admin/panel', verificarAdmin, handler);
  Puntos Clave

  • Middleware se ejecuta ANTES que la ruta
  • Sin next() la ruta nunca se ejecuta
  • Acepta parámetro desde URL, body o headers
  • Fácil de aplicar a múltiples rutas