使用 Swagger UI 进行测试时如何解决 API 中的 CORS 错误(使用 Lumen 实现)
Posted
技术标签:
【中文标题】使用 Swagger UI 进行测试时如何解决 API 中的 CORS 错误(使用 Lumen 实现)【英文标题】:How to solve CORS error in api (implemented using Lumen) while testing using Swagger UI 【发布时间】:2018-06-07 03:10:39 【问题描述】:我在通过 Swagger UI 触发使用 Lumen 创建的 API 时遇到了 CORS 错误。所以我创建了一个中间件来解决这个CORS问题:
<?php
namespace App\Http\Middleware;
use Closure;
class CorsMiddleware
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
$headers = [
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, DELETE',
'Access-Control-Allow-Credentials' => 'true',
'Access-Control-Max-Age' => '86400',
'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With'
];
if ($request->isMethod('OPTIONS'))
return response()->json('"method":"OPTIONS"', 200, $headers);
$response = $next($request);
foreach($headers as $key => $value)
$response->header($key, $value);
return $response;
并在我的 API 路由中使用了这个中间件,现在在使用这个之后,我的严重错误问题解决了,但 API 无法正常工作,引发以下代码错误:
//**** code that throwing error starts ****
$config = app()->make('config');
$data = array_merge([
'client_id' => $config->get('secrets.client_id'),
'client_secret' => $config->get('secrets.client_secret'),
'grant_type' => $grantType,
'username' =>$data['username'],
'password' =>$data['password']
], $data);
$http = new Client();
$headers = ['Content-Type' => 'application/json'];
$guzzleResponse = $http->post( $config->get('app.url').'/oauth/token', [
'form_params' => $data,
]);
$tokenDetails = json_decode($guzzleResponse->getBody(),true);
//************** Code throwing error ends ******
现在,当我从路由中删除中间件时,API 与 POSTMAN 一起工作正常,但为 SWagger 抛出 CORS 错误,当我使用中间件解决 CORS 问题时,API 无法正常工作。
【问题讨论】:
错误是什么? 如果未使用中间件,则有时会出现 CORS 错误,如果使用会出现 500 内部服务器错误。 【参考方案1】:在 .htaccess 中添加这一行
RewriteCond %REQUEST_METHOD 选项 重写规则 ^(.*)$ $1 [R=200,L] RewriteEngine上线后
【讨论】:
以上是关于使用 Swagger UI 进行测试时如何解决 API 中的 CORS 错误(使用 Lumen 实现)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 springfox 在 Swagger UI 中绕过授权
Swagger2 UI 提示"请确保swagger资源接口正确"解决办法