使用 Laravel Lighthouse 在 Laravel 7 中出现 CORS 错误

Posted

技术标签:

【中文标题】使用 Laravel Lighthouse 在 Laravel 7 中出现 CORS 错误【英文标题】:CORS Error in Laravel 7 using Laravel Lighthouse 【发布时间】:2020-07-17 21:25:57 【问题描述】:

我有一个使用 Laravel 和 Lighthouse-php(用于 GraphQL)构建的 API。我的客户端是用 Vue js 构建的,并使用 Apollo 进行 graphQL 客户端实现。每当我提出请求时,都会收到以下错误:

Access to fetch at 'http://localhost:8000/graphql' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

当然,我继续安装 laravel-cors 包,但后来我意识到它是默认安装在我的 Laravel 安装(7.2.2)中的。这意味着 \Fruitcake\Cors\HandleCors::class 已经添加到 Kernel.php 的中间件数组中,并且 cors 配置文件已经在我的配置目录中。

经过一番谷歌搜索,我意识到我需要将\Fruitcake\Cors\HandleCors::class 添加到我的config/lighthouse.php 文件中的route.middleware 数组中

还是不行。我已经重新启动服务器,清除缓存,清除配置并运行composer dump-autoload,但我仍然收到错误消息。我不知道如何克服这一点。任何帮助将不胜感激。

版本

Laravel 7.2.2

Laravel 灯塔 4.10

【问题讨论】:

【参考方案1】:

我从灯塔here 的人们那里得到了一些帮助。问题出在我的 cors 配置上。我需要将graphql 添加到config/cors 中的路径数组中,但我错误地添加了graphql/*。所以路径数组看起来像这样

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

而不是这个

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

进行更改后,我运行以下命令: 在 CORS 错误消失之前,php artisan cache:clearphp artisan config:clearcomposer dump-autoload

对我有用的完整配置是

return [
    'paths' => ['api/*', 'graphql'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['*'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => false,
    'max_age' => false,
    'supports_credentials' => false,
];

【讨论】:

以上是关于使用 Laravel Lighthouse 在 Laravel 7 中出现 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel Lighthouse 中添加自定义类型和解析器

Laravel Lighthouse 配置 - 无法找到可发布的资源

如何在lighthouse graphql laravel中获取自定义指令参数?

Laravel Lighthouse 中的授权

变异中的 Laravel LightHouse GraphQL DateTime 输入始终为空

Laravel Lighthouse GraphQL - 在服务器端排序