Middleware

  • Los middleware son filtros que se ejecutan antes de que el control pase a las rutas.

  • Podemos asciar un middleware a una ruta:

    Route::get('profile', 'UserController@show')->middleware('auth');
    
  • O a un controlador, en su constructor:

    class UserController extends Controller
    {
      public function __construct()
      {
          $this->middleware('auth'); //aplicable a todos los métodos
          $this->middleware('log')->only('index');//solamente a ....
          $this->middleware('subscribed')->except('store');//todos excepto ...
      }
    }
    

    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, dispondemos 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 artisasn:
    php artisan make:controller MiddlewareEsAdmin
    
  • 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.
 <?php

namespace App\Http\Middleware;

use Closure;

class IsAdmin
{
    public function handle($request, Closure $next)
    {
        $user = $request->user();
        if ($user && $user->username == 'admin') {
            return $next($request);
        }
        abort(403, 'acceso denegado');
    }
}
  • Registrar el middleware en el kernel dentro de $routeMiddleware

  • Ya podemos usarlo como el resto:

Route::get('families/ajax', 'FamilyController@ajax')->middleware('admin');

results matching ""

    No results matching ""