#
Middleware
Los middleware son como puertas intermedias que permiten o niegan el acceso a un recurso. Formalmente son:
Middleware provide a convenient mechanism for inspecting and filtering HTTP requests entering your application
El middleware más notorio es el del auth que redirecciona al login a los usuarios que no están autentificados, es decir, que no se han logueado en el sistema.
La instrucción en Artisan para crear un middleware:
php artisan make:middleware EnsureTokenIsValid
El archivo resultante se almacena en app/Http/Middleware.
La sintaxis del middleware:
<?php
namespace App\Http\Middleware;
use Closure;
class EnsureTokenIsValid
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->input('token') !== 'my-secret-token') {
return redirect('home');
}
return $next($request);
}
}
En este ejemplo se entiende que se creó un middleware con el nombre EnsureTokenIsValid que se asegura de que un token sea válido. El método handle($request, Closure $next) recibe la petición y tiene el recurso al cuál dirigirse si se cruza el middleware. En la línea 18 se comprueba si el token que viene del formulario ($request->input) es distinto al que está alojado en la cadena _my-secret-token; de ser así se redirecciona al home del proyecto y sino se continúa a donde apuntaba el recurso ($next($request)).
#
Registro del middleware
El middleware ya se creó ahora debe registrarse en el kernel para su uso. Si el middleware va a utilizarse en cada petición HTTP, es decir, cada cambio de página, deberá registrarse globalmente de lo contrario se indicará en las rutas donde se requiera.
Para uso global, en cada petición de HTTP:
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Illuminate\Http\Middleware\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
Para uso en las rutas deberá asignarse un nombre, como el del ejemplo auth:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'tieneHabs'=> \App\Http\Middleware\TieneHabilidades::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
En el caso de las rutas del archivo routes\web se usa de la siguiente forma:
Route::get('habilidades/create',[HabilidadesController::class,'create'])
->middleware(['auth']);