Los middleware proporcionan un mecanismo de defensa ante la recogida de respuestas HTTP en nuestra aplicación. El middleware más famoso con el que cuenta Laravel es el de la autentifación de usuarios por el que no nos dejará navegar en la aplicación a menos que estemos convenientemente logueados.
Pero también podemos crear nuestros propios middlewares para complementar la aplicación con seguridad extra.
Definir un middleware
php artisan make:middleware ComprobarRole
Este comando crea una nueva clase llamada ComprobarRole dentro del directorio app/Http/Middleware.
Como ejemplo podemos restringir el acceso a cierta página o vista si tu rol escrito en un input de texto es «guest». Esto quiere decir que aquel usuario que escriba «guest» será redireccionado de nuevo al formulario, si escribe otro rol, tendrá acceso.
Más adelante aprenderemos a mostrar los mensajes devueltos mediante las sesiones…
Si las condiciones anteriores no se cumplen, el middleware retornará una redirección HTTP al cliente, y en el caso a probar se hace una llamada al callback $next con $request.
namespace App\Http\Middleware; use Closure; class ComprobarRole { public function handle($request, Closure $next) { $role = $request->role; if ($role == 'guest') { return redirect('/');// página del formulario } return $next($request); } }
Registro del middleware
Para que se ejecuten los middlewares debemos declararlos dentro del fichero app/Http/Kernel.php como una clase.
Asignación a rutas
En la propiedad $routeMiddleware es un donde normalmente se declaran estas clases middleware. Por ejemplo, en nuestro caso sería así…
protected $routeMiddleware = [ // ...... 'comprobarrole' => \App\Http\Middleware\ComprobarRole::class, ];
Una vez declarado podremos agregarlo a la ruta tal que así:
Route::post('procesar', 'TestController@procesar')->middleware('comprobarrole');
Asignación global
Para usarla en toda la aplicación sin ninguna restricción se declarará la clase en el atributo $middleware de la clase Kernel.
Dentro de los controladores
Para declarar los middlewares dentro de los controladores se asigna dentro del constructor del controlador. Usaremos el método middleware() y cuyos parámetros pueden ser para todos los métodos que componen el controlador, solo algunos, o descartar otros.
Para terminar, tan solo comentar la utilidad que tienen los middleware ante la posibilidad de impregnar nuestra aplicación con más seguridad y restricciones en la parte del servidor