Protección de Rutas y Controladores en Laravel con Middleware

Clase 9 de 37Curso de Introducción a Laravel 6

Contenido del curso

Crear PlatziPress

Construir Proyecto Final: API con TDD (Intermedio)

Resumen

Cuando construyes una aplicación web con Laravel, existe una capa intermedia que decide quién puede acceder a qué recurso antes de que la petición llegue a su destino. Esa capa se llama middleware y es una de las herramientas más poderosas para agregar seguridad a tus proyectos.

¿Qué es un middleware y por qué es importante?

Un middleware es literalmente algo que está en el medio entre dos puntos. En el contexto de Laravel, se ubica entre la petición HTTP del usuario y la respuesta del servidor [0:26]. Cada vez que alguien accede a una página web, lo hace a través del protocolo HTTP. El middleware actúa como un filtro que intercepta esa petición y decide si debe continuar o ser rechazada.

Este concepto no es exclusivo de Laravel. Existe desde hace años en el mundo de la informática y las telecomunicaciones [1:17]. Una analogía sencilla: cuando haces una llamada telefónica, el celular funciona como middleware entre tú y la otra persona. Platzi misma actúa como middleware entre el profesor y el estudiante.

¿Dónde se encuentran los archivos de middleware?

Los middleware son clases PHP ubicadas en la carpeta app/HTTP/Middleware [2:10]. Al abrir esa carpeta encontrarás varios archivos predefinidos. El más relevante es el de autenticación, que contiene la lógica necesaria para redirigir al usuario al formulario de login cuando no está logueado [2:22].

¿Cómo se configuran los alias de middleware?

Laravel utiliza un archivo llamado kernel.php, ubicado en app/HTTP/, que configura todo el sistema HTTP [2:55]. Dentro de este archivo se definen alias como auth, can, guest y verified. Cada alias apunta a una clase específica dentro de la carpeta middleware. Por ejemplo, la palabra auth representa la ruta completa app/HTTP/Middleware/Authenticate [3:15]. Esto permite usar nombres cortos en lugar de rutas largas.

¿Cómo proteger rutas con middleware en Laravel?

Proteger una ruta es sencillo. En el archivo web.php agregas el método ->middleware('auth') al final de la definición de la ruta [2:36]. Con esto, cualquier usuario no autenticado será redirigido automáticamente.

Para proteger rutas de recursos, el proceso es igual de directo:

php Route::resource('users', UserController::class)->middleware('auth');

Esto protege las siete rutas que Laravel genera automáticamente con un resource controller [4:30].

¿Se puede aplicar middleware directamente en el controlador?

Sí. Otra opción es proteger el controlador creando un constructor que registre el middleware [3:45]:

php class UserController extends Controller { public function __construct() { $this->middleware('auth'); } }

El constructor es el primer método que se ejecuta cuando se intenta acceder al controlador. Sin embargo, hay una regla importante: no debes usar ambos métodos al mismo tiempo [4:05].

  • Si proteges la ruta, la petición nunca llega al controlador.
  • Si proteges el controlador, la ruta permite el paso pero la seguridad se aplica al llegar.

La práctica recomendada es hacerlo directamente en las rutas para mantener los controladores ligeros y organizados [4:15].

¿Cómo crear un controlador para practicar middleware?

Para generar un controlador desde la terminal, ejecutas el comando Artisan [3:30]:

bash php artisan make:controller UserController

Este comando crea la clase dentro de app/HTTP/Controllers. A partir de ahí puedes definir el constructor con el middleware o proteger las rutas que apuntan a ese controlador desde web.php.

El sistema de middleware es fundamental para construir aplicaciones seguras. Comprender cómo funciona esta capa intermedia te permite controlar el acceso a cada rincón de tu aplicación de forma clara y mantenible. Si ya experimentaste con las rutas de recursos, combinar ambos conceptos te dará una base sólida para los proyectos que vienen. ¿Qué estrategia prefieres: proteger desde la ruta o desde el controlador?