Solucionar CORS en Laravel

Cuando hacemos peticiones a nuestro backend desde otro servidor (Como por ejemplo, desde nuestro framework fronted, alojado en otra dirección), nos dará un error de acceso no permitido CORS (Cross-Origin Request Blocked).

Este error no es especifico de Laravel, si no que es un método de seguridad que se dá en las peticiones que se hagan a otro servidor y no se tenga acceso. Para solucionar esto, manteniendo la seguridad, vamos a crear un middleware en las rutas que queramos realizar dichas peticiones.

Creando middleware para CORS

Crearemos el middleware en nuestro proyecto, ejecutando el siguiente comando:

php artisan make:middleware Cors

Ahora, nos dirigimos a la clase creada, que se encuentra en app/Http/Middleware/Cors.php y añadiremos esto:

<?php
namespace App\Http\Middleware;
use Closure;
class Cors
{
  public function handle($request, Closure $next)
  {
    return $next($request)
       //Url a la que se le dará acceso en las peticiones
      ->header("Access-Control-Allow-Origin", "http://urlfronted.example")
      //Métodos que a los que se da acceso
      ->header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE")
      //Headers de la petición
      ->header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Token-Auth, Authorization"); 
  }
}

Como siempre, registramos nuestro middleware en app/Http/kernel.php

protected $routeMiddleware = [
  ...,
  ...,
  "cors" => \App\Http\Middleware\Cors::class,
 ];

Y por último añadimos el middleware en la/s rutas que queramos permitir estas peticiones:

Route::group(['middleware' => ['cors']], function () {
    //Rutas a las que se permitirá acceso
});