No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Introducción a Laravel 6

Curso de Introducción a Laravel 6

Profesor Italo Morales F

Profesor Italo Morales F

Uso de Middlewares

9/37
Recursos

Veamos en este post cómo crear e implementar un middleware. La función principal es proporcionar una fácil y conveniente capa para filtrar las solicitudes HTTP. Existen diferentes maneras de hacerlo y de hecho Laravel incluye un middleware que verifica si el usuario está autenticado.

Puedes crear un middleware de registro y tener logs detallados de cada solicitud entrante, cualquier cosa que se te ocurra respecto a HTTP puedes llevarla a cabo usando esta tecnología.

Middleware Personalizado

$ php artisan make:middleware Subscribed

Este se crea en app/Http/Middleware/Subscribed.php. Con él puedes verificar si el usuario está suscrito a mi plan de pago de mi sistema web. O crear un middleware que revise si el usuario que se intenta registrar es mayor de edad.

$ php artisan make:middleware VerifyAge

En ambos casos tendremos nuestros middleware estarán creados en app\Http\Middleware\. Dentro de cada archivo debemos colocar la lógica de acceso correcto. Por ejemplo:

<?php

namespace App\Http\Middleware;

use Closure;

class Subscribed
{
    //...
    public function handle($request, Closure $next)
    {
        if ( ! $request->user()->subscribed) {
            return abort(403, 'Sin suscripción activa');
        }

        return $next($request);
    }
}

403: La solicitud fue legal, fue correcta, pero el servidor no la responderá porque el cliente no tiene los privilegios o permisos.

Y respecto a la edad podemos hacer lo siguiente:

<?php

namespace App\Http\Middleware;

use Closure;

class VerifyAge
{
    //...
    public function handle($request, Closure $next)
    {
        if ($request->get('age') < 18) {
            return redirect('guidelines');
        }

        return $next($request);
    }
}

Aquí dirigimos al usuario a una vista que tenga los textos apropiados para explicarle porqué no podemos seguir con el registro.

Registro de las Clases Middleware

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    //...
    protected $middleware = [];

    //...
    protected $middlewareGroups = [];

    //...
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'subscribed' => \App\Http\Middleware\Subscribed::class,
        'verify-age' => \App\Http\Middleware\VerifyAge::class,
    ];

    //...
    protected $middlewarePriority = [];
}

Y luego podemos usarla y aplicarla donde corresponde. Veamos en una ruta varios ejemplos:

Route::get('/example', 'ExampleController@...')
    ->middleware('auth', 'subscribed', 'verify-age');

Acá y en el video de la clase vimos la forma correcta de proteger a nuestras rutas o métodos en controladores, lo importante es definir qué queremos proteger o interceder y crear la lógica en un archivo aparte. Una persona con poca experiencia usaría estos if pero en las vistas, en cada método de un controlador o en cada una de las rutas. Esto funcionaria pero no es la manera correcta de trabajar.

Aportes 45

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Felicitaciones maneja una muy buena metodológica, clara y practica, espero que platzi tome estas apreciaciones, para que evalúe y conozca que esta, es la calidad de clases que los estudiantes estamos buscando.
Gracias

Para proteger un grupo de rutas con middleware al mismo tiempo, se puede usar el siguiente método:

Route::middleware(['auth'])->group(function () {
    Route::view('/', 'welcome');
    Route::resource('users', 'UserController');
}

Así no habría que poner ->middelware('auth) al final de cada ruta y queda el código más limpio.

Uso de Middlewares


Middleware trata sobre hacer filtrados a peticiones HTTP. Esto quiere decir, que a través de esta capa podemos agregar seguridad.

Los middleware no es un concepto de Laravel, es algo que siempre esta en el medio. En el mundo de las telecomunicaciones se usa con mayor frecuencia.

Los middleware son archivos/clases que van a estar dentro de la carpeta app → Http → Middleware, Laravel nos trae una serie de archivos.

Este línea de código nos ayuda a autenticar si un user está login o no.

middleware('auth');

🤞 Si vamos a utilizar el middleware(‘auth’); debemos utilizarlo en un solo lugar, o en la ruta o en el controlador pero nunca en los dos al mismo tiempo. Lo recomendado es hacerlo en las rutas.

Middleware.- El middleware proporciona un mecanismo conveniente para filtrar las solicitudes HTTP que ingresan a su aplicación. Por ejemplo, Laravel incluye un middleware que verifica que el usuario de su aplicación esté autenticado. Si el usuario no está autenticado, el middleware lo redireccionará a la pantalla de inicio de sesión. Sin embargo, si el usuario está autenticado, el middleware permitirá que la solicitud continúe en la aplicación.

Middleware Personalizado

 php artisan make:middleware Subscribed 

Este se crea en app/Http/Middleware/Subscribed.php. Con él puedes verificar si el usuario está suscrito a mi plan de pago de mi sistema web. O crear un middleware que revise si el usuario que se intenta registrar es mayor de edad.

pero ¿si solo quiero proteger con un middleware solo una de las 7 rutas cuando es resource como se hace?

Calidad de profesor 💯

Un middleware es básicamente ese intermediario que está entre la petición y el controlador, es código que se ejecuta antes de nuestro código principal, y efectivamente sirven para proteger las rutas aqu+i en laravel, yo en lo personal prefiero usar $this->middleware en un controlador porque prefiero proteger únicamente los métodos necesarios en lugar de proteger el controlador entero:D

No hay seccion de enlaces D:

Que Genial lo del Archivo Kernel.php hace que todo sea más facil

Yo lo aprendí así:

El concepto de middleware es como una cebolla, la petición HTTP tiene que pasar por todas las capas (middlewares) de la cebolla antes de llegar al centro (nuestro código en ruta o controlador).

El orden de los middlewares es muy importante y afecta la respuesta.

tengo platzi hace un año y al fin entiendo laravel buena metodología de enseñanza, clara y detallada.

Un Middleware se trata básicamente de un filtro de una petición HTTP. Esto quiere decir que, al acceder un página y hacer una solicitud, el middleware podría ser usado para agregar seguridad a esta antes de responder a la solicitud.

En Laravel los middleware se encuentran dentro de la carpeta app>http>middleware. Por defecto viene un middleware con la lógica para redirigir a un usuario a un formulario de login si no ha iniciado sesión.

Agregar un middleware a una ruta:

Route::get('/', function(){
	return view('welcome');
})->middleware('<nombre>');

Para poder agregar el middleware primero hay que agregarlo en el archivo app>http>kernel.php. Ahí se encuentran todos los middleware que Laravel agrega por defecto.

También se pueden agregar middlewares a los controladores, en este caso de autenticación. De las dos formas funcionará, pero no se debe proteger la ruta y el controlador al mismo tiempo.

class UserController extends Controller{
	public function __construct(){
		$this->middleware('auth');
	}
}

Por lo general se agregan a las rutas para mantener los controladores más limpios.

Para tener en cuenta: aparecen unos simbolos en el codigo

&lt;?php

namespace App\Http\Middleware;

use Closure;

class Subscribed
{
    //...
    public function handle($request, Closure $next)
    {
        if ( ! $request-&gt;user()-&gt;subscribed) {
            return abort(403, 'Sin suscripción activa');
        }

        return $next($request);
    }
}

Lo Correcto seria:

<?php

namespace App\Http\Middleware;

use Closure;

class Suscribed
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (!$request->user()->subscribed) {
            return abort(403, "Sin suscripcion activa");
        }

        return $next($request);
    }
}

Ufff me costo un poco entenderlo y más que todo saber aplicarlo.

Middleware, es un mecanismo conveniente para inspeccionar y filtrar las solicitudes Http que ingresan en nuestra aplicación.

referencia: https://laravel.com/docs/8.x/middleware#excluding-middleware

Middleware se usa para filtrar peticiones HTTP, se usa para dar seguridad de nuestras aplicaciones.
Es un término usado en todo el ámbito de la informática, especialmente en telecomunicaciones.

seccion de enlace, excelente

Excelente clase

Esta super, muy claro.

class UserController extends Controller
{
    public function __costruct(){
        $this->middleware('auth');
    }
}

Excelente clase!

Asi me quedo en el web.php ya haciendo las configuraciones, espero este bien jeje

Route::get('/subscription', 'SubscriptionController')->middleware('subscribed');

Route::get('/verifyAge', 'VerifyController')->middleware('verify-age');

Laravel ofrece un muy buen sistema de autenticación, gracias a los Middleware.

Veamos en este post cómo crear e implementar un middleware. La función principal es proporcionar una fácil y conveniente capa para filtrar las solicitudes HTTP. Existen diferentes maneras de hacerlo y de hecho Laravel incluye un middleware que verifica si el usuario está autenticado

Puedes crear un middleware de registro y tener logs detallados de cada solicitud entrante, cualquier cosa que se te ocurra respecto a HTTP puedes llevarla a cabo usando esta tecnología

Auth es un Alias.

Muy interesante la forma de proteger las rutas, la manera como se inyecta el Middleware de Autenticación.

O crear un middleware que revise si el usuario que se intenta registrar es mayor de edad.

 php artisan make:middleware VerifyAge

En la siguiente ruta es donde estan registrados los middlewares en el kernel

 app > Http > Kernel.php

Gracias

Italo tiene muy buenos videos gratis en youtube !!! que felicidad encontrarlo aca

De verdad que buen profesor ❤️

Esta interesante el curso, gracias.

Excelente ahora me queda mas claro este concepto , gracias profesor su explicación es muy clara y precisa 😄

perfecto

muy bueno

que serian los closures?

Excelente, es muy simple la seguridad en laravel, que bien explico el tema el profe!

Una excelente Clase y un excelente Maestro.

se puede utilizar esto para crear diferentes middlewares de autentificacion, es decir, si mi aplicacion tiene 3 paneles de autentificacion, cada tipo de usuario se almacena en una tabla diferente, se puede crear un middleware para cada una de las tablas para autentificarse o como sera la forma correcta de hacerlo?

que es ::resource??

Excelente clase !!!

Documentación oficial sobre los middelwares en la pagina de Laravel, po si quiere informarse más.
https://laravel.com/docs/8.x/middleware

No sé qué me pasa pero estoy tan confundido como no lo había estado en los otros cursos previos.

Que genial clase, excelente el complemento en las notas de la clase

Una persona con poca experiencia usaría estos if pero en las vistas, en cada método de un controlador o en cada una de las rutas. Esto funcionaria pero no es la manera correcta de trabajar.

Este tema se me hace complejo