17. Cómo proteger rutas con expresiones regulares

En este capítulo, aprenderás cómo proteger rutas en Laravel 10 utilizando expresiones regulares. Las expresiones regulares son patrones que se utilizan para validar y filtrar datos. Te enseñaremos cómo utilizar expresiones regulares para restringir el acceso a ciertas rutas y mejorar la seguridad de tu aplicación Laravel.


5 comentarios

Inicia sesión para comentar

Comentarios:

  • Victor Arana Flores

    Victor Arana Flores hace 1 año Destacado

    En Laravel, puede restringir el formato de los parámetros de ruta utilizando el método where() en una instancia de ruta. Este método acepta el nombre del parámetro y una expresión regular que define cómo se debe restringir el parámetro. Por ejemplo:

    Route::get('/user/{name}', function (string $name) {
       // ...
    })->where('name', '[A-Za-z]+');
    Route::get('/user/{id}', function (string $id) {
       // ...
    })->where('id', '[0-9]+');
    Route::get('/user/{id}/{name}', function (string $id, string $name) {
       // ...
    })->where(['id' => '[0-9]+', 'name' => '[a-z]+']);


    Además, hay métodos auxiliares que le permiten agregar rápidamente restricciones de patrones a sus rutas. Algunos de los métodos auxiliares comunes son:

    Route::get('/user/{id}/{name}', function (string $id, string $name) {
       // ...
    })->whereNumber('id')->whereAlpha('name');
    Route::get('/user/{name}', function (string $name) {
       // ...
    })->whereAlphaNumeric('name');
    Route::get('/user/{id}', function (string $id) {
       // ...
    })->whereUuid('id');
    Route::get('/user/{id}', function (string $id) {
       //
    })->whereUlid('id');
    Route::get('/category/{category}', function (string $category) {
       // ...
    })->whereIn('category', ['movie', 'song', 'painting']);

    Si la solicitud entrante no coincide con las restricciones del patrón de ruta, se devolverá una respuesta HTTP 404.

    Si desea que un parámetro de ruta siempre esté restringido por una expresión regular dada, puede usar el método pattern(). Puede definir estos patrones en el método boot() de tu App\Providers\AppServiceProvider clase. Por ejemplo:

    use Illuminate\Support\Facades\Route;
     
    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        Route::pattern('id', '[0-9]+');
    }

    Una vez definido el patrón, se aplica automáticamente a todas las rutas que utilicen ese nombre de parámetro:

    Route::get('/user/{id}', function (string $id) {
        // Only executed if {id} is numeric...
    });
  • Inescop

    Inescop hace 5 meses

    No existe el archivo RouteServiceProvider, y pongo 
    Route::pattern('id', '[0-9]+');

    en el archivo AppServiceProvider y me da un error:

    Method Illuminate\Routing\Route::pattern does not exist.


     

    • Jhan Carlos Garcia Cordova hace 5 meses

      En versiones actuales de laravel, ya no trae “RouteServiceProvider”, para ese caso debes hacerlo en “AppServiceProvider.php” dentro de la “function boot()”.
      así quedaría:
      public function boot(): void

      Route::pattern('id', '[0-9]+');
      }

      Y luego declaras :
      use Illuminate\Support\Facades\Route;

      con eso lo tienes solucionado.

    • Inescop hace 5 meses

      Gracias!

    • Julian David Jaramillo hace 4 meses

      gracias

  • Marcos Romero

    Marcos Romero hace 1 año

    Tu curso esta genial hermano, solo una pequeña observación para los próximos curso que saque, trate de poner un poco de zoom para que se pueda ver mas claramente algo de código, de ahi todo genial, gracias por el curso y apoyo.

    • Victor Arana Flores hace 1 año

      Hola Marcos, claro que si. Y de hecho voy a regrabar la primera parte de este curso.

      Normalmente grababa mis cursos en mi laptop, con una pantalla pequeña, por lo cual cuando las personas veían el curso solian ver el codigo grande. Para este curso empece a grabarlo desde mi computadora, con una pantalla muchisimo más grande, y el codigo se veía pequeño (aun cuando tiene zoom) ahora cuando grabo si le pongo mas zoom aun, y ya se ve bien desde cualquier dispositivo.

       

  • Victor Roman Ortiz Abreu

    Victor Roman Ortiz Abreu hace 2 años

    hay que reconocer que has mejorado mucho desde que pusiste este mismo curso free hasta el momento, ya tiene un lenguaje mas formal en la logica de programacion, Felicidades!!!

  • Victor Roman Ortiz Abreu

    Victor Roman Ortiz Abreu hace 2 años

    hola, serias tan amable de cuando explique la teoria, pudieses bajar el mouse dos lineas para que pueda verse bien lo que usted explica, en el caso de [A-Za-z] tapa un poco y es molesto tener que repertir el fragmento del video por ese detalle, le agradesco mucho su apoyo y atención.

    • Victor Arana Flores hace 1 año

      Hola Victor, claro. Trataré de corregir esos detalles.