Laravel 6 CORS 政策问题与 API

Posted

技术标签:

【中文标题】Laravel 6 CORS 政策问题与 API【英文标题】:Laravel 6 CORS policy issue with API 【发布时间】:2020-03-30 08:17:56 【问题描述】:

这是我尝试过的

中间件

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

API 路由

Route::group(['middleware' => ['cors', 'auth:api']], function() 
Route::options('any');
Route::post('user/profile','UserController@profile');

内核.php

protected $routeMiddleware = [
    'cors' => \App\Http\Middleware\Cors::class,

但是,我仍然在从另一个来源调用 API 时收到此错误。

对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。

有什么原因吗?

【问题讨论】:

您找到解决方案了吗?我找不到解决方案。所有解决方案都不起作用。忍无可忍。我不想修改文件 bootstrap/app.php 【参考方案1】:

在您的 composer.json 中需要 fruitcake/laravel-cors 包并更新您的依赖项:

composer require fruitcake/laravel-cors

全球使用情况

要允许所有路由使用 CORS,请在 app/Http/Kernel.php 类的 $middleware 属性中添加 HandleCors 中间件:

protected $middleware = [
    // ...
    \Fruitcake\Cors\HandleCors::class,
];

配置

php artisan vendor:publish --tag="cors"

现在更新配置以定义您想要运行 CORS 服务的路径,(请参阅下面的配置):

config/cors.php

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

更多详情https://github.com/fruitcake/laravel-cors

【讨论】:

HandleCors 中间件应该在$middleware:***.com/a/63913814/11792577的顶部【参考方案2】:

最简单的解决方案 转到引导文件夹并打开 app.php 文件。然后只需在文件顶部添加这些行。 app.php

  header('Access-Control-Allow-Origin: *');
  header('Access-Control-Allow-Methods: *');
  header('Access-Control-Allow-Headers: *');

另一种解决方案:

      php artisan make:middleware Cors

现在从 App\Http\Middleware 文件夹中打开 Cors.php 并将 handle() 函数替换为以下代码:

Cors.php

  public function handle($request, Closure $next)
  
      return $next($request)
          ->header('Access-Control-Allow-Origin', '*')
          ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE,

        OPTIONS')
          ->header('Access-Control-Allow-Headers', 'Content-Type, Authorizations');
  

最后,从 App\Http 文件夹中打开 Kernel.php,将下面一行添加到 $middleware 数组中:

  protected $middleware = [
      ...
      \App\Http\Middleware\Cors::class,
  ];

现在运行应用程序并从任何地方调用 API。

教程结束。谢谢你。 ?

MyNotePaper回答

【讨论】:

以上是关于Laravel 6 CORS 政策问题与 API的主要内容,如果未能解决你的问题,请参考以下文章

被 CORS 政策阻止并没有解决! Laravel + Vuejs

当我尝试使用 Axios 调用 Instagram API 时,我“被 CORS 政策阻止” [重复]

在这种情况下出现问题 CORS 策略,而它适用于其他资源

barryvdh/laravel-cors 配置在 Laravel 5.6 中不起作用;忽略'allowedMethods'

Laravel 5.7 API 与 CORS 问题

CORS 政策问题刚刚开始,没有代码更改 - “CORS 政策:'Access-Control-Allow-Origin' 标头包含多个值”