How do I resolve a CORS error using Laravel?

Updated: Feb 04, 2025

How do I resolve a CORS error using Laravel?

CORS (Cross-Origin Resource Sharing) is a security feature implemented by web browsers that restricts web pages from making requests to a different domain than the one that served the web page. Laravel, being a popular PHP framework, provides built-in support for CORS through the Cors middleware.

To resolve a CORS error using Laravel, follow these steps:

  1. Enable CORS middleware:

First, you need to enable the CORS middleware in your Laravel application. Open the app/Http/Kernel.php file and add the Cors middleware to the $routeMiddleware array and the $middlewareGroups array as shown below:

protected $routeMiddleware = [
    // ...
    'cors' => \Illuminate\Cors\HandleCors::class,
];

protected $middlewareGroups = [
    // ...
    'api' => [
        // ...
        \Illuminate\Cors\HandleCors::class,
    ],
];
  1. Define CORS options:

Next, you need to define the CORS options that specify which domains, methods, and headers are allowed. Open the app/Http/Middleware/HandleCors.php file and update the handle() method as shown below:

public function handle($request, Closure $next, $options = null)
{
    if ($options) {
        return $next($request)
            ->header('Access-Control-Allow-Origin', $options['origin'])
            ->header('Access-Control-Allow-Methods', $options['methods'])
            ->header('Access-Control-Allow-Headers', $options['headers']);
    }

    return $next($request)
        ->header('Access-Control-Allow-Origin', '*')
        ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
        ->header('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With');
}

The handle() method accepts an optional $options parameter that can be used to define custom CORS options. In the example above, we allow all origins, methods, and headers. You can replace the '*' value with specific domains, methods, and headers as needed.

  1. Apply CORS middleware:

Finally, you need to apply the CORS middleware to the routes or controllers that require CORS support. You can apply the middleware to a route by adding it to the $middleware array in the routes/web.php or routes/api.php file as shown below:

Route::get('/api/users', 'UserController@index')
    ->middleware('cors');

Or, you can apply the middleware to a controller by adding it to the __construct() method as shown below:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

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

    // ...
}

By following these steps, you should be able to resolve CORS errors in your Laravel application.