Ultima Laravel
Share
Explore
Controladores, middleware y formularios

icon picker
Middleware o filtros

Middleware

Middleware es responsable de filtrar las solicitudes HTTP que llegan a la aplicación, así como las que se van (mucho menos utilizadas). El caso más clásico es el de verificar la autenticación de un usuario para que pueda acceder a ciertos recursos. También puede usar un middleware, por ejemplo, para iniciar la administración de la sesión.
Aquí hay un diagrama para ilustrar esto:

image.png

En realidad, podemos tener varios middlewares en cáscaras de cebolla, cada uno lleva a cabo su tratamiento y transmite la solicitud o la respuesta a la siguiente.
Por lo tanto, tan pronto como haya un tratamiento a realizar a la llegada de las solicitudes (o a su salida), se indica un middleware.
Laravel se puede utilizar como una aplicación "web" o "api". En el primer caso necesitamos:
administrar cookies,
para gestionar una sesión,
para administrar la protección CSRF

Archivo Kernel.php, donde se registran los middelware

Para ver los middleware configurados en nuestro sistema tenemos que entrar en el archivo app/Http/Kernel.php.
El Kernel es el que le dice a Laravel qué middlewares tiene que cargar. Allí encontrarás una clase que tiene registrados los middleware que se van a ejecutar en el sistema, tanto de manera global (propiedad $middleware) como para rutas particulares (propiedad $routeMiddleware).

Hay dos middlewares de grupos (se juntan varios middlewares) "web" y "api". Vemos que en el primer caso activamos cookies, sesiones y verificación CSRF.
Por defecto, todas las rutas que ingresa en el archivo routes / web.php están incluidas en el grupo "web". Si busca en el proveedor / Providers / RouteServiceProvider.php encontrará esta inclusión:
image.png
image.png
Los middleware son filtros que se ejecutan antes de que el control pase a una ruta o a un controlador.
Podemos asociar un middleware a una ruta:
O a un controlador, en su constructor:

kernel.php

En el kernel.php de la aplicación se definen varias cuestiones relativas a los middleware.
Un grupo de middleware que se aplican a todas las peticiones. Atributo $middleware.
Se asignan nombres a los middleware para ser usados en las rutas. Atributo $routeMiddleware.
Dos grupos de middleware:
web que se aplica a todas las rutas definidas en el fichero de rutas web.php
api que se aplica a las rutas del fichero api.php

Ejemplos de middleware

CheckForMaintenanceMode Se aplica a todas las rutas. Se activa su funcionalidad con los comandos:
php artisan down
php artisan up
Después de down genera un error 503
Comprueba la existencia del fichero /storage/framework/down
Down crea el fichero, up lo borra.
Vamos a ver los que se aplican a todas las peticiones web.
EncryptCookies. Encripta las cookies
AddQueuedCookiesToResponse. Añade las cookies creadas mediante el método Cookie::queue($micookie);
StartSession. Inicia sesión de forma automática.
ShareErrorsFromSession Hace visible el objeto errors tras la validación.
VerifyCsrfToken. Verifica los token CSRF.
SubstituteBindings ¿?
Además, dispondremos de los siguientes definidos en route:
auth. Pasa el filtro si estás autenticado.
guest. Pasa el filtro si no has hecho login
can. Filtro usado para autorización.
throttle. Limita el número de peticiones por minuto aceptadas desde un host determinado.

Construir un middleware:

Usamos artisan:
Código.
La lógica está en la función handle.
Si se dan las condiciones adecuadas se pasa el filtro (return $next($request);)
Si no se dan las condiciones abortar o redirigir.
Registrar el middleware en el kernel dentro de $routeMiddleware
Ya podemos usarlo como el resto:

Protección CSRF

Hemos visto que el formulario generado por Laravel tiene una línea especial:
image.png
Si miramos el código generado, encontramos algo como esto:
image.png
El midedleware VerifyCsrfToken, el cual es incluido en el grupo de middleware web, verificará automáticamente que el token en el campo de la solicitud coincida con el almacenado en la sesión.
Para que sirve
En primer lugar, CSRF significa Cross-Site Request Forgery.( falsificación de solicitudes entre sitios) . Es un ataque que implica enviar una solicitud a un cliente sin su conocimiento. Este ataque es relativamente sencillo de configurar y consiste en enviar a un cliente autenticado en un sitio un script oculto (en una página web o un correo electrónico) para que realice una acción sin su conocimiento.
Para protegerse contra este tipo de ataque, Laravel genera un valor aleatorio ( token ) asociado con el formulario, de modo que en el envío este valor se verifica para asegurarse del origen.
¿ Dónde está este middleware CSRF?
Está ordenado en la carpeta app / Http / Middleware :
image.png
Para probar la efectividad de esta verificación, intente enviar un formulario sin el token, modificando así la vista:
Te encuentras con esta página al enviar:
image.png
Como el token no es bueno, Laravel concluye que ha caducado porque obviamente tiene un período de validez limitado vinculado a la sesión.
Analicemos esta respuesta un poco mejor:
image.png
Vemos una respuesta 419 que aún no forma parte del estándar HTTP, pero que se usa cada vez más como una alternativa a 401.
Analicemos esta respuesta un poco mejor:
image.png
Vemos una respuesta 419 que aún no forma parte del estándar HTTP, pero se usa cada vez más como una alternativa al 401.
Página de error personalizada
La página de error en la que hemos caído no es muy explícita y está en inglés. Podríamos quererlo en español, o simplemente cambiar el estilo. ¿Pero dónde está el código de esta página? Busque en la carpeta vendor/laravel/frameword:
image.png
image.png
Encuentra una carpeta de las vistas predeterminadas de Laravel para los errores más comunes. ¡Obviamente no modificará estas vistas directamente en la carpeta vendor! Pero puede anular estas vistas creando una carpeta de resources/views/errors y copiando el archivo afectado:
image.png
Entonces tenemos este código:
Share
 
Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.