LaravelでWebAPIサーバを作成する時、クロスドメインアクセスを行うためにCORSの処理を作成する場合があります。技術検証などでどこからでもアクセスできるCORSの処理をてっとり作ることが何度か発生したので手順をメモしておきます。
middlewareを作成する
cat <<'EOT' > app/Http/Middleware/Cors.php
<?php
namespace App\Http\Middleware;
use Closure;
class Cors
{
public function handle($request, Closure $next)
{
if ($request->getMethod() === "OPTIONS") {
// OPTIONSメソッドの場合は何もしない
$response = response('');
} else {
$response = $next($request);
}
return $response
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Headers', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
}
}
EOT
作成したmiddlewareを登録する
Kernel.phpを編集します
vi app/Http/Kernel.php
apiの定義へ、先ほど作成したmiddlewareを追記します。
'api' => [
\App\Http\Middleware\Cors::class,
...
],
preflightのOPTIONS処理用のルーティングを作成する
routes/api.phpのルーディングに追加します。
# php7.4以降の場合
Route:: options('/{any}', fn() => '')->where('any', '.*');
# php7.3までの場合
Route:: options('/{any}', function(){ return ''})->where('any', '.*');
以上で完了です。
こちらもおススメ