Laravel5.5でCORSに対応させるのにbarryvdh/laravel-corsを使わない方法

apiを提供するためにcors対応しないといけなくて、Laravelでよく使われているbarryvdh/laravel-cors を使わないで
https://qiita.com/TsukasaGR/items/8bf1247c37ee96855ca8 を参考にクロスドメイン対策。

まずはミドルウェアの作成

app/Http/Middleware/Cors.php

<?php
namespace App\Http\Middleware;

use Closure;

class Cors
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request)
            ->header('Access-Control-Allow-Origin', '*')
            ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS')
            ->header('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With');
    }
}

次にミドルウェアを追加

app/Http/Kernel.php

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\ViewSwitchMiddleware::class,
            \App\Http\Middleware\Cors::class // ← 追加

        ],

        'api' => [
            'throttle:60,1',
            'bindings',

        ],
    ];

もっと細かい設定したいなら素直に barryvdh/laravel-cors を使ったほうがいいです。

あと、ハマったのがNginxのconfではじめcorsの対策をしていたのですがこれをしてるとLaravel側で設定してもうまく反映しませんでした。
Laravel側でやるならNginxのconfでは対応しない方がいいかもしれません。詳しくは調べてませんのでそれ違うよということがあるかもしれませんが・・・
うまくいかない人がいたらその辺も疑ってみてください。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする