本番環境
Vue.js 2.6.12
netlify にデプロイしてます
axios で Laravel とやりとりしてます
Laravel 8.25.0
Xserver にデプロイしてます
問題
まず、ローカル環境でポートフォリオ作成していた時に Vue.js側 と Laravel側 で異なるドメインへのアクセスするために Cors対応しないといけないと知りました。
そこでこちらの記事を参考にして config/cors.php を編集して、Vue.js と Laravel でやりとりができるようになりました。
Laravel7でのCors対応について
<?php return [ 'paths' => ['*'], 'allowed_methods' => ['*'], 'allowed_origins' => ['*'], 'allowed_origins_patterns' => [], 'allowed_headers' => ['*'], 'exposed_headers' => false, 'max_age' => false, 'supports_credentials' => false, ];
しかし、本番環境になると
error
1Access to XMLHttpRequest at 'https://www.*****.com/api/posts/' from origin 'https://******.app' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
と error のログがでてブロックされてしまいます。
調べたこと
こちらの記事を参考にして CORS を設定するミドルウェアを作成してみました
CORSについて理解してLaravel5.6で対応する
####ミドルウェアを作成して修正
Cros
1<?php 2 3namespace App\Http\Middleware; 4 5use Closure; 6use Illuminate\Http\Request; 7 8class Cors 9{ 10 /** 11 * Handle an incoming request. 12 * 13 * @param \Illuminate\Http\Request $request 14 * @param \Closure $next 15 * @return mixed 16 */ 17 public function handle(Request $request, Closure $next) 18 { 19 return $next($request) 20 ->header('Access-Control-Allow-Origin', '*') 21 ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') 22 ->header('Access-Control-Allow-Headers', 'Accept, X-Requested-With, Origin, Content-Type'); 23 } 24}
####カーネルに追加
Kernel
1 protected $routeMiddleware = [ 2 'auth' => \App\Http\Middleware\Authenticate::class, 3 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 4 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 5 'can' => \Illuminate\Auth\Middleware\Authorize::class, 6 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 7 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 8 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 9 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 10 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 11 'cors' => \App\Http\Middleware\Cors::class, //+追加 12 ];
####routeを修正
api
1Route::middleware(['cors'])->group(function () { 2 Route::options('accounts', function () { 3 return response()->json(); 4 }); 5 6 Route::post('accounts', 'AccountController@create'); 7});
しかし同じエラーが出てしまい、ブロックされてしまいます。。
まだ理解できていない事も多いので、勘違いをしてどこか間違えているのかもしれません。
このエラーを解決するためにどうかお力を貸してほしいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。