Post Top Ad

Your Ad Spot

jueves, 8 de octubre de 2020

Tutorial y ejemplo de Laravel 8 CORS

 En este tutorial, le mostraremos cómo trabajar con CORS (intercambio de recursos de origen cruzado) en Laravel 8.

Este tutorial le muestra cómo implementar CORS tanto en Laravel 6 usando un paquete de terceros como en Laravel 8 y Laravel 7, que incluyen un paquete propio para el soporte de CORS.

Soporte Laravel 8 CORS

Según los documentos oficiales

Laravel puede responder automáticamente a las solicitudes CORS OPTIONS con los valores que usted configure. Todas las configuraciones de CORS pueden configurarse en su archivo de configuración de cors y las solicitudes de OPCIONES serán manejadas automáticamente por el HandleCorsmiddleware que se incluye por defecto en su pila global de middleware.

Esto significa que Laravel 8 tiene soporte incorporado para CORS usando el HandleCorsmiddleware que se incluye de forma predeterminada en su pila global de middleware.

El soporte CORS se agrega a través del paquete fruitcake / laravel-cors que ha agregado soporte para Laravel 8 .

Cómo configurar CORS en Laravel 8

Todos los ajustes de CORS se pueden configurar en su corsarchivo de configuración.

Abra el config/cors.phparchivo y cambie la configuración requerida según sus requisitos:

<?php

return [

    'paths' => ['api/*'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => false,

    'max_age' => false,

    'supports_credentials' => false,

];

Si está utilizando otras versiones de Laravel, asegúrese de leer a continuación.

Soporte Laravel 7 CORS

Laravel 7 se lanzó en marzo y proporciona soporte integrado para CORS, por lo que los desarrolladores no necesitan usar paquetes de terceros para habilitar CORS en sus aplicaciones de laravel.

Según los documentos oficiales :

Laravel 7 incluye soporte de primera parte para configurar respuestas de solicitud de OPCIONES de intercambio de recursos de origen cruzado (CORS) al integrar el popular paquete Laravel CORS escrito por Barry vd. Heuvel. Se incluye una nueva configuración de cors en el esqueleto predeterminado de la aplicación Laravel.

Para Laravel 6, asegúrese de continuar leyendo a continuación para ver un ejemplo paso a paso sobre cómo habilitar CORS en su backend de API REST.

Laravel 7 CORS por ejemplo

Veamos ahora cómo se maneja CORS en Laravel 7. De hecho, no es necesario hacer mucho. Abra una nueva interfaz de línea de comandos y comience generando un nuevo proyecto de Laravel 7 :

composer create-project --prefer-dist laravel/laravel laravel-7-cors-example

Notarás que un paquete llamado fruitcake/laravel-corsestá instalado en tu proyecto.

Laravel 7 puede responder automáticamente a las OPTIONSsolicitudes HTTP CORS con valores que puede configurar.

Todos los ajustes de CORS se pueden configurar en su corsarchivo de configuración.

Abra el config/cors.phparchivo:

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Cross-Origin Resource Sharing (CORS) Configuration
    |--------------------------------------------------------------------------
    |
    | Here you may configure your settings for cross-origin resource sharing
    | or "CORS". This determines what cross-origin operations may execute
    | in web browsers. You are free to adjust these settings as needed.
    |
    | To learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
    |
    */

    'paths' => ['api/*'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => false,

    'max_age' => false,

    'supports_credentials' => false,

];

Como puede ver, puede configurar los distintos aspectos de su aplicación, tales como:

  • Las rutas que tendrán CORS configurado,
  • Los métodos permitidos.
  • Los orígenes permitidos,
  • las cabeceras permitidas.
  • La edad máxima
  • Las credenciales apoyan.

Si está utilizando encabezados personalizados, como X-Auth-Token, debe agregar estos encabezados en la allowed_headersmatriz. También puede usar ['*'] para permitir todos los encabezados personalizados.

allowed_originsallowed_headersallowed_methodsse puede ajustar a [ '*'] para aceptar cualquier valor.

Nota: Debido a la anulación del método http en Laravel, si habilita los métodos POST, los usuarios también pueden enviar solicitudes PUT y DELETE sin ningún problema de CORS.

Las OPTIONSsolicitudes HTTP se manejarán automáticamente. Abra el App/Http/Middleware/Kernel.phparchivo:

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \Fruitcake\Cors\HandleCors::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

El HandleCorsmiddleware se agrega de forma predeterminada en los middlewares gloabl del proyecto.

API de Laravel 6 con ejemplo CORS

Comencemos creando una ruta API simple en nuestro proyecto Laravel.

Dirígete al routes/api.phparchivo y agrega la siguiente ruta.

Route::get('/my-api-endpoint',  function  (Request $request)  {

  return response()->json(['Hello Laravel 7']);

});

Ahora, si necesitamos llamar a este punto final de API desde otro dominio, aparecerán problemas de CORS.

Envío de una solicitud Http / Ajax

Cree un nuevo archivo HTML con el nombre index.phpdentro de una carpeta separada y agregue el siguiente código JavaScript / jQuery para conectarse a la API de Laravel:

<!DOCTYPE html>
<html>
<head>

  <title>Laravel 6/7 CORS Middleware Tutorial</title>

  <script  src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"  crossorigin="anonymous"></script>

</head>

<body>

<script  type="text/javascript">

  $.ajax({
    type:  "GET",
    dataType:  "json",
    url:  'http://localhost:8000/my-api-endpoint',
    success:  function(data){
        console.log(data);
    }
  });

</script>
</body>
</html>

Simplemente puede ejecutar este script usando el servidor incorporado de PHP de la siguiente manera:

$ php -S localhost:8080

Ahora tenemos dos aplicaciones que se ejecutan desde dos puertos diferentes: localhost:8080localhost:8000que se consideran dos dominios diferentes.

El error CORS

Si el CORS no está configurado correctamente en el servidor de destino, que es en nuestro caso, Laravel, enfrentaremos problemas de CORS que no permiten que el código JavaScript / jQuery se conecte al punto final de la API por razones de seguridad.

Este es el mensaje de error exacto que debería ver en la consola de su navegador:

Access to XMLHttpRequest at 'http://localhost:8000/my-api-endpoint' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Esto simplemente dice que Access-Control-Allow-Origindebe haber un encabezado en el recurso solicitado.

Resolviendo los problemas de CORS en Laravel 6

En Laravel 6. Los problemas de CORS se pueden resolver usando el barryvdh/laravel-corspaquete que se puede instalar usando Composer.

Instalación y configuración barryvdh/laravel-cors

Regrese a su terminal y asegúrese de estar dentro de su proyecto Laravel 6/7, luego instale instale el barryvdh/laravel-corspaquete usando el siguiente comando:

$ composer require barryvdh/laravel-cors

A continuación, vaya al config/app.phparchivo y actualícelo de la siguiente manera:

'providers'  =>  [

  [...]

  Barryvdh\Cors\ServiceProvider::class,

],

A continuación, agregue el \Barryvdh\Cors\HandleCorsmiddleware al app/Http/Kernel.phparchivo:

protected $middleware =  [

  [...]

 \Barryvdh\Cors\HandleCors::class,

];

Conclusión

Eso es todo, ahora ejecuta su aplicación Laravel 8 y prueba su código nuevamente, lo que debería funcionar sin problemas de CORS.

También hemos visto cómo configurar CORS tanto en Laravel 7 usando el soporte integrado como en Laravel 6 usando un paquete de terceros.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas