これは非常に一般的な問題であり、他にも多くの質問があることはわかっていますが、どうすればよいかわかりません。 Laravel APIアプリケーションを5.8
から7.10.3
にアップグレードしましたが、今は以前には発生しなかったこのCORS
問題に直面しています。= Laravel 7はすでにfruitcake/laravel-cors
パッケージを提供しており、これがconfig/cors.php
の私の設定(デフォルト設定)です:
'paths' => ['api/*'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => false,
基本的に、すべてのOrigin
、headers
およびmethods
が許可されます。これらの行をbootstrap/app.php
に追加することも試みましたが、機能しません。
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: *');
header('Access-Control-Allow-Headers: *');
私のフロントエンドはVueCli 3
で構築されており、何も変更せず、Laravelバージョンをアップグレードしました。
POSTMAN
へのリクエストは正常に機能しています。この問題が発生している理由を誰かが知っていますか?
完全なエラーメッセージ:
Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/operacao/cadastrar' from Origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
問題を発見しました:リクエストが$request->validate()
メソッドで失敗し、次のようなカスタム例外ハンドラーを持つ_try / catch
_ブロック内にありました:
_try {
$request->validate(array(...)); //validation was failing
//code...
} catch (\Exception $e) {
//This was the problem
http_response_code(400);
die($e->getMessage());
}
_
try
の前に$request->validate()
を置くだけで動作しました。 validate()
には独自の例外ハンドラがあることを覚えておいてください。
これがCORSエラーを引き起こした理由は正確にはわかりませんが、_Access-Control-Allow-Origin
_などの前にheaders
を送信していたためだと思います。
REACTを使用して同様の問題があり、私の解決策はヘッダーを追加し、このようにリクエストをフォーマットすることでした。
axios.request({
method: "POST",
url: '<url>',
data: data,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
})
.then(function (response) {
<what to do if works>
})
.catch((response) => {
<what to do if it doesn't work>
})