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.
3 comentarios
Inicia sesión para comentar
Comentarios:
-
Irving Sumano hace 1 semana
Mi versión de Laravel ya no trael el Kernel.php dentro de Http, ¿cómo los uso entonces?
-
Jonathan Jv hace 5 meses
Obtengo el siguiente error al usar redirect('no-autorizado)
-
Victor Arana Flores hace 5 meses
Hola Jonathan, tu captura solo me indica que has tenido un error. Necesitaría mas información para poder ayudarte.
-
-
Walter hace 2 años
? 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 1 año
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