Я определил два промежуточных ПО: EnableCORSRequest
и EnableAllCORSRequest
. EnableCORSRequest
- это глобальное промежуточное ПО, я загружал его в Kernel.php
.
часть кода Kernel.php
$protected $middleware = [
// ... other middleware
EnableCORSRequest::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
// ... some middleware, I don't use web.php
],
'api' => [
'throttle:60,1',
'bindings',
'cors', // this is EnableCORSRequest
],
'api_no_throttle' => [
'bindings',
'cors', // this is EnableCORSRequest
]
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
// ... others
'cors' => EnableCORSRequest::class,
'no_cors' => EnableAllCORSRequest::class,
];
Я использую его в api.php
:
// I don't want this api to be blocked by cors, so use this middleware
Route::post('/merchant/wallet/withdraw', 'Wallet@withdraw')
->middleware('no_cors');
Но на самом деле no_cors
не делал работает, нет ошибок, нет предупреждений.
Для теста я добавил сообщение журнала в эти два класса
class EnableCORSRequest
{
public function handle($request, Closure $next)
{
// add this const definition, because to avoid that if this middleware loaded after another one, the CORS option may be overwritten
if(defined('ALLOW_CORS_REQUEST')){
return $next($request);
}
\Log::info('enable_cors');
// ......
}
}
class EnableAllCORSRequest
{
public function handle($request, Closure $next)
{
define('ALLOW_CORS_REQUEST', 1);
\Log::info('disable_cors');
$response = $next($request);
$response->header('Access-Control-Allow-Origin', '*');
$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN');
$response->header('Access-Control-Expose-Headers', 'Authorization, authenticated');
$response->header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
$response->header('Access-Control-Allow-Credentials', 'true');
return $response;
}
}
, затем я обращаюсь к этому API через браузер и смотрю свой файл журнала, просто [2020-05-27 15:13:36] test.INFO: enable_cors