pedrolimapi / dingo-laravel-cors
为您的 Laravel 应用程序添加 CORS(跨源资源共享)头部支持
Requires
- php: >=5.5.9
- illuminate/support: 5.1.x|5.2.x|5.3.x|5.4.x
- symfony/http-foundation: ~2.7|~3.0
- symfony/http-kernel: ~2.7|~3.0
Requires (Dev)
- phpunit/phpunit: ^4.8|^5.2
This package is not auto-updated.
Last update: 2017-07-06 21:09:13 UTC
README
基于 https://github.com/asm89/stack-cors
对于 Laravel 4,请使用 0.2 分支!
关于
laravel-cors
包允许您使用 ACL 风格的按 URL 配置发送跨源资源共享(CORS)头部。
如果您想了解 CORS 工作流程的全貌,可以查看此 图片。
功能
- 处理 CORS 预检 OPTIONS 请求
- 向您的响应中添加 CORS 头部
配置
默认值在 config/cors.php
中设置。将此文件复制到您的配置目录中以修改值。您可以使用以下命令发布配置
php artisan vendor:publish --provider="Pedrolimapi\Cors\ServiceProvider"
注意:当使用自定义头部,如
X-Auth-Token
或X-Requested-With
时,您必须将 allowedHeaders 设置为包括这些头部。您也可以将其设置为array('*')
以允许所有自定义头部。
注意:如果您明确列出允许的头部,则必须包括
Origin
,否则请求将无法被识别为 CORS。
return [ /* |-------------------------------------------------------------------------- | Laravel CORS |-------------------------------------------------------------------------- | | allowedOrigins, allowedHeaders and allowedMethods can be set to array('*') | to accept any value. | */ 'supportsCredentials' => false, 'allowedOrigins' => ['*'], 'allowedHeaders' => ['*'], // ex : ['Content-Type', 'Accept'] 'allowedMethods' => ['*'], // ex: ['GET', 'POST', 'PUT', 'DELETE'] 'exposedHeaders' => [], 'maxAge' => 0, 'hosts' => [], ]
allowedOrigins
、allowedHeaders
和 allowedMethods
可以设置为 array('*')
以接受任何值,但允许的方法必须明确列出。
注意:由于 Laravel 中的 http 方法重写,允许 POST 方法也将使 API 用户能够执行 PUT 和 DELETE 请求。
安装
在您的 composer.json 中要求 Pedrolimapi/dingo-laravel-cors
包,并更新您的依赖项。
$ composer require Pedrolimapi/dingo-laravel-cors
将 Cors\ServiceProvider 添加到您的 config/app.php 提供者数组中
Pedrolimapi\Cors\ServiceProvider::class,
使用
ServiceProvider 添加了一个名为 cors
的路由中间件,您可以使用它来添加 CORS 支持。
Route::group(['middleware' => 'cors'], function(Router $router){ $router->get('api', 'ApiController@index'); });
如果您想 CORS 应用于所有路由,请将其添加到 app/http/Kernel.php
中的全局中间件
protected $middleware = [ .... \Pedrolimapi\Cors\HandleCors::class ];
Lumen
在 Laravel Lumen 上,使用 LumenServiceProvider
'Pedrolimapi\Cors\LumenServiceProvider',
并手动加载您的配置文件
$app->configure('cors');
常见问题和错误
为了让包正常工作,请求必须是有效的 CORS 请求,并且需要包含一个 "Origin" 头部。
当发生错误时,中间件没有完全运行。因此,在这种情况下,您将看不到实际的结果,而是会收到一个 CORS 错误。
这可能是一个CSRF令牌错误,也可能只是一个简单的问题。
禁用API的CSRF保护
在App\Http\Middleware\VerifyCsrfToken
中,将您的路由添加到异常中
protected $except = [ 'api/*' ];
调试错误
一个简单但有些不规范的解决方法是始终发送CORS头信息。这不建议在生产环境中使用,但它会显示实际的错误。
将以下内容添加到public/index.php
的顶部
header("Access-Control-Allow-Origin: *");
别忘了在生产环境中移除它,这样您就可以指定允许哪些路由/头信息/源。
您还可以在异常处理器中将CORS头信息添加到错误中
public function render($request, Exception $e) { $response = parent::render($request, $e); if ($request->is('api/*')) { app('Pedrolimapi\Cors\Stack\CorsService')->addActualRequestHeaders($response, $request); } return $response; }
许可证
在MIT许可证下发布,请参阅LICENSE。