php Laravel 6 CORS策略问题与API

hfsqlsce  于 5个月前  发布在  PHP
关注(0)|答案(3)|浏览(49)

这是我尝试的

中间件

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');

Kernel.php

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


但是,我仍然从另一个来源在API调用中得到这个错误。
对预检请求的响应未通过访问控制检查:请求的资源上不存在“Check-Control-Allow-Origin”标头。
有什么原因吗?

tzcvj98z

tzcvj98z1#

最简单的解决方案转到引导文件夹并打开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

drkbr07n

drkbr07n2#

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

composer require fruitcake/laravel-cors

字符串

全球使用

要允许所有路由使用CORS,请在app/Http/Kernel.phpclass的$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

ccrfmcuu

ccrfmcuu3#

你好,如果你使用的是laravel 6,可能上面所有的解析都不起作用。
所以你应该把下面的代码放在文件RouteServiceProvider.php中:

public function boot()
{
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: *');
    header('Access-Control-Allow-Headers: *');
    parent::boot();
}

字符串

相关问题