Middleware en Laravel

De manera general

Vamos inicialmente con un concepto general y luego lo llevamos a #Laravel, entonces, es un software que proporciona un enlace entre aplicaciones o sistemas independientes. Podríamos decir que un Middleware se usa como la vía que conecta dos aplicaciones o dos partes y pasa los datos entre ellas. Significa medio y lo fabricamos en cualquier área, de hecho un middleware puede ser un hardware, este termino se usa desde hace décadas.

Ahora vamos a Laravel

Un middleware es un archivo que filtra las peticiones en un sistema, no lo olvides, un archivo adicional que va en el medio de tu petición y de eso que quieres ver o acceder. Esto está disponible desde la versión 5 de Laravel… En realidad crea una capa adicional donde puedes colocar la lógica de acceso, por ejemplo una lógica de inicio de sesión avanzada, donde se evalúen roles y permisos del usuario que está iniciando sesión.

En español sería

Imagina esto: Estas planeando un evento privado en el que tú y tus amigos o colegas verían un buen partido de fútbol (la final de la FIFA y tu equipo está ahí con posibilidades de ser campeón) este evento lo has planeado en un buen lugar, pero las posibilidades de tener ahí personas no invitadas son muy altas. Por este motivo, podemos deducir que necesitas un middleware que permita la entrada solo a aquellos que hayan sido invitados. Nuestro middleware es entonces un buen guardia de seguridad que se quedará en la entrada y su única función es pedir datos y tarjeta de entrada.

¿Otro ejemplo? …muy bien.

¡Una empresa organizará un clásico futbolístico!, sabes que la hinchada es violenta y su pasión a veces, nos hace presenciar desgracias en los juegos, entonces el organizador implementa un middleware solo para que dirija a las personas a un área correcta, es decir, si usted es hincha del equipo A entonces dirige a la persona hacia la zona de la derecha, y si es hincha del equipo B entonces dirige a la persona hacia la izquierda, de esa manera separa a las personas y reduce el riesgo y las posibilidades de problemas.

¿Qué pudiste observar?

Por favor comenta eso que comprendiste y deduces respecto al middleware.

Por otro lado, quédate con este concepto: Un middleware altera el flujo, o realizar alguna acción de acuerdo a la necesidad inmediata en el sistema.

Como cultura general: Antes de Laravel versión 5, cuando queríamos hacer algo parecido a esto, usábamos el feature llamado filtro. Desde la versión 5 este método ha sido reemplazado por algo más profesional y se llama Middleware (ya lo sabías). Usarás está tecnología cuando quieras restringir el acceso a las rutas pero también modificar los objetos de petición y respuesta para que se ajusten a nuestras necesidades.

Vamos con ejemplo en código 🙂

Un middleware se define en una clase, podría decirse que por cada restricción o regla debemos crear una clase. Y para crear esta clase ejecutamos el comando php artisan make:middleware EjemploMiddleware y crea dicha clase en la siguiente ruta App\Http\Middleware\EjemploMiddleware.php

Detallemos porque esto es muy importante; vemos un ejemplo de clase Middleware llamada EjemploMiddleware. No extiende de nadie y lo único que debemos hacer es colocar la lógica dentro del método handle() , sigamos con la descripción,

Este método acepta dos parámetros por defecto:

  1. El primero recibe, como lo dice el comentario   @param \Illuminate\Http\Request $request la misma instancia usada en los controladores, aquel que recibe los formularios y los datos de peticiones.
  2. El segundo es $next, un Closure. Cumple con la función de ejecutar el siguiente middleware si la aplicación pasa correctamente este paso, los middleware se ejecutan uno tras otro (cadena de middleware), si la petición no pasa algún middleware no llegamos al NEXT.

¿Cuando se rompe la cadena?

Sólo se terminan cuando los detenemos manualmente, es decir no devolviendo $next($request)  o si llegamos al fin de la cadena, es decir, se detiene de forma natural.

Middleware Real – Authenticate

Léelo con detenimiento, de hecho vuelve ahí y compréndelo 🙂

Tenemos la estructura normal y un método adicional, se llama authenticate(), eso es simple organización. Vemos que si el usuario no se autentica regresará un error, dice exactamente  Unauthenticated

Con esto terminamos, vimos lo necesario para comprender esta gran tecnología. Quiero que me ayudes con algo… Responde en los comentarios ¿Cuando o en que casos usarías un middleware?

Tu respuesta me ayudará con el siguiente post, y gracias a ti podría ser muy práctico.

Comparte este artículo

Entra en la discusión y deja tu comentario

  • Christian Ariel Galvez

    Interesante la explicación. A las claras, parece estar orientado principalmente a cuestiones de seguridad y/u organización (redirecciones), aunque tambien por ejemplo se podría usar para activar modos de la aplicación, tipo modo mantenimiento, modo normal, etc. Faltaría un ejemplo práctico para por ejemplo, autorización. Muy bueno.

    • Excelente Christian, es “exactamente” para ese tipo de situaciones, gracias por comentar 🙂

  • Rodrigo

    Hola!, muy buena guía, aunque me quedan dudas acerca de la diferencia con el uso de policy, y las autorizaciones con form Request, pienso q un middleware abarca más en general y los otros cosas específicas, pero no estoy seguro. Gracias!

    • Las políticas de acceso solo devuelven 403 si no pasas… Un middleware para todo lo demás 🙂

      • Rodrigo

        Gracias!!!

  • Manuel Dautt

    Explicacion super sencilla, sin tecnicismos ni palabras de mas, muchas gracias, puedes hacer un destajo de cada unidad de laravel asi?

    • De hecho eso quiero, ya hablamos de las políticas de acceso y ahora middleware, poco a poco miguel, muchas gracias por comentar amigo…

      • Manuel Dautt

        Excelente!!!!

  • Sergio Sojo

    Simplemente sensillo, voy siguiendo a Italo de hace unos mese, y la vedad lo explica todo de talmanera que sea muy entendible. Muchas Felicidades Italo

    • Muchas gracias sergio, es el objetivo y de nuevo gracias por validarlo en tu comentario…

  • Kendu Script

    Genial, venía usando Middlewares en Slim para la verificación de CSRF Tokens, ahora q estoy aprendiendo Laravel me doy cuenta lo robusto q es. Muy buena explicación.

    • Muchas gracias Kendu, ya sabes ahora que es ese archivo que sirve de encrucijada 🙂 y que puede ayudar muchísimo respecto a filtros en el sistema.

Veces