[Laravel] composerパッケージ無しでCORS処理を1分で作成する

カテゴリ: Laravel, PHP | タグ:

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', '.*');

以上で完了です。

こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。