laravel8のAPIで、CORS(Cross-Origin Resource Sharing = 異なるドメインからでもAPIが使える)に対応する。
【追記】
laravel8はデフォルトでcorsが実装されており、APIは認証ありになっている!
config/cors.phpの値を以下のように変更したら、corsエラーは出なくなった。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php return [ //'paths' => ['api/*', 'sanctum/csrf-cookie'], 'paths' => ['*'], 'allowed_methods' => ['*'], 'allowed_origins' => ['*'], 'allowed_origins_patterns' => [], 'allowed_headers' => ['*'], 'exposed_headers' => [], 'max_age' => 0, //'supports_credentials' => false, 'supports_credentials' => true, ]; |
デフォルトだと同じドメインでないとAPIが使えない。エラーになる。
laravel側で、ヘッダーで許可を出してあげればOK
1, middleware(リクエスト&レスポンスの処理をする所)を作る。
1 |
php artisan make:middleware Cors |
2, 許可ヘッダーの設定を行う
app/Http/Middleware/Cors.php
1 2 3 4 5 6 7 8 9 |
public function handle(Request $request, Closure $next) { //return $next($request); return $next($request) //->header('Access-Control-Allow-Origin', 'http://localhost:8080') ->header('Access-Control-Allow-Origin', '*') //どのOriginを許可するか設定 ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') // 許可するメソッド ->header('Access-Control-Allow-Headers', 'Content-Type'); // 許可するHTTPヘッダー } |
3, 自作ミドルウェアをlaravelに組み込む
app/Http/Kernel.php
1 2 3 4 5 |
protected $routeMiddleware = [ /// .... 'cors' => \App\Http\Middleware\Cors::class, ]; |
4, apiのルーティングに仕込む
routes/api.php
1 2 3 4 |
// CORS対応(どのオリジンからでもOK) Route::group(['middleware' => ['api', 'cors']], function(){ Route::Resource('memo', MemoController::class); }); |
簡単、簡単!
テスト用には、この方が良いけど、本番運用では同じオリジンだけにした方が良いよな~。