34. Que son los middlewares

En Laravel, los middlewares son una característica importante que permite ejecutar acciones entre la recepción de una solicitud HTTP y la respuesta del servidor. Los middlewares se utilizan comúnmente para realizar tareas comunes como la autenticación, gestión de sesiones y validación de datos, y también se pueden crear middlewares personalizados para tareas específicas.

Los middlewares se pueden definir a nivel de ruta o global, y se pueden encadenar para ejecutar varias tareas en secuencia. Los middlewares son una herramienta poderosa para mejorar la seguridad, eficiencia y escalabilidad de tus aplicaciones web en Laravel.


1 comentarios

Inicia sesión para comentar

Comentarios:

  • Walter

    Walter hace 1 año

    ? Creando un middleware

    artisan make:middleware CheckAge

    Se crea en app/Http/Middleware/CheckAge.php

    Este archivo contiene una clase CheckAge con un método handle que se encargará de filtrar las solicitudes HTTP.

    public function handle(Request $request, Closure $next) {
    	return $next($request);
    }

          

    ? Registrando un middleware

    Para usar nuestro nuevo middleware debemos registrarlo en app/Http/Kernel.php:

    protected RouteMiddleware = [
    	...
    	'age' => \App\Http\Middleware\CheckAge::class,
    ]

     

    ? Asignando nuestro middleware a una ruta 

    En el archivo web.php:

    Route::get('prueba', function () {
    	return "Has accedido correctamente a esta ruta.";
    })->middleware('age');

    Creamos una nueva ruta:

    Route::get('no-autorizado', function () {
    	return "Ud. no es mayor de edad.";
    });

     

    ? Probando nuestro middleware

    Reemplazamos el contenido del método handle por el siguiente código:

    public function handle(Request $request, Closure $next) {
    	if($request->age >= 18) {
    		return $next($request);
    	} else {
    		return redirect('no-autorizado');
    	}
    }

    Probamos las siguientes rutas en el navegador:

    • blog.test/prueba?age=5
    • blog.test/prueba?age=20

     

    ? Cambiamos el tipo de comprobación

    Para no depender de un parámetro pasado por la URL y utilizar la información del usuario actualmente logueado hacemos lo siguiente en el método handle:

    public function handle(Request $request, Closure $next) {
    	if( auth()->user()->email == "victor.aranaf92@gmail.com" ) {
    		return $next($request);
    	} else {
    		return redirect('no-autorizado');
    	}
    }

    Para el caso de no estar autenticado el anterior código produce un error ya que no encuentra la propiedad email. Para evitar este error actualizamos la ruta en web.php:

    Route::get('prueba', function () {
    	return "Has accedido correctamente a esta ruta.";
    })->middleware( ['auth:sanctum', 'age'] );

    De esta forma la ruta debe cumplir con los dos middlewares y si no estamos autenticados nos redirige a la pantalla de login.

     

    • Carlos hace 9 meses

      como seria un middleware para validar un formulario de registro que usuario existas en una base de datos externa antes de registrarse en la base actual