Laravel 6 - 19 Proteger nuestras rutas con middleware

Laravel Logo

Hola y bienvenido a esta nueva clase.

Los Middleware son una especie de filtro http que nos ayuda a proteger las rutas de nuestra aplicación.

Por ejemplo, cuando estuvimos trabajando la clase https://solibeth.net/laravel-6-03-instalar-el-sistema-de-autenticacion  se instalaron algunas cosas, y entre ellas tenemos:

1) una ruta en el archivo web.php: 

Route::get('/home', 'HomeController@index')->name('home');

2) un controlador de ejemplo llamado homcontroller:

3) varios controladores en una carpeta llamada auth. 

4) una vista llamada home.blade.php.

Entre muchas cosas mas.

Sin embargo, lo que mas nos interesa ahora mismo es el homcontroller, que podemos ver que usa un middleware

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        return view('home');
    }
}

En este constructor podemos ver que se usa este filtro, con el propósito de que si acceden a la url home, pues se ejecute este middelware.

y ¿Qué hace este middleware?

si vamos a la ruta: app/Http/Kernel.php, veremos la siguiente sección:

   protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

si vamos a la ruta: \App\Http\Middleware\Authenticate.php veremos que lo que contiene es:

<?php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }
}

Una redirección a la página del login.

En este sentido, existe varias formas de asignar middleware a una ruta:

1) En el archivo web.php

Route::get('/agenda/{id}/confirm','AgendaController@confirm' )->name('agenda.confirm')-middleware('auth');

2) otra forma en el archivo web.php

Route::get('/agenda/{id}/confirm',['middleware'=>'auth'],'AgendaController@confirm' )->name('agenda.confirm');

3) Si queremos aplicar a todos los métodos de un controlador podemos agregar esto:

public function __construct()
{
    $this->middleware('auth');
}

Si queremos aplicar a un método en específico de un controlador lo podemos hacer así:

public function __construct()
{
    $this->middleware('auth', ['only' => ['edit']]);
}

o así:

public function __construct()
    {
        $this->middleware('auth')->only(['edit']);
    }

Espero que les haya servido así que sin mas, nos veremos en la próxima....

 

 

 

 

 

 

Etiquetas

Comparte este artículo