web-dev-qa-db-ja.com

Laravel 7-リクエストされたリソースに「Access-Control-Allow-Origin」ヘッダーがありません

これは非常に一般的な問題であり、他にも多くの質問があることはわかっていますが、どうすればよいかわかりません。 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,

基本的に、すべてのOriginheadersおよび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.
1
Fantasmic

問題を発見しました:リクエストが$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を送信していたためだと思います。

1
Fantasmic

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>
   })
0
Lucas Pacheco