Kein ‘Access-Control-Allow-Origin’-Header – Laravel

Lesezeit: 7 Minuten

Benutzeravatar von Kerry Ritter
Kerry Ritter

XMLHttpRequest kann nicht geladen werden http://myapi/api/rating. Die Antwort auf die Preflight-Anfrage besteht die Zugriffssteuerungsprüfung nicht: Für die angeforderte Ressource ist kein Header „Access-Control-Allow-Origin“ vorhanden. Herkunft ‘http://localhost:8104‘ wird daher kein Zugriff gewährt. Die Antwort hatte den HTTP-Statuscode 403.

Ich kann nicht herausfinden, warum ich keine CORS-Anfragen stellen kann. Ich habe die Middleware hier installiert und dem globalen http-Kernel hinzugefügt, aber es funktioniert immer noch nicht. Es wurde versucht, eine benutzerdefinierte Middleware mit Stackoverflow-Vorschlägen zu erstellen, aber das hat auch nicht funktioniert. Auch versucht, eine Routengruppe hinzuzufügen. Zuletzt habe ich versucht, die Antwortheader manuell in der Anforderungsaktion festzulegen. Ich stecke wirklich fest – Hilfe ist willkommen!

Siehe Code: https://gist.github.com/KerryRitter/0d7ababb7b9eb8d54f0ae55add9704a1

  • Seien Sie einfach, verwenden Sie dieses Plugin: github.com/barryvdh/laravel-cors

    – Zahl8er

    22. April 2017 um 23:53 Uhr

  • Das habe ich, das ist die Middleware, die ich erwähnt habe (vergessen zu sagen). Ich habe den Kernel wie in meinem Kern gesehen hinzugefügt

    – Kerry Ritter

    23. April 2017 um 0:20 Uhr

  • wie wäre es, es so zu halten: 'middleware' => [\Barryvdh\Cors\HandleCors::class]

    – Zahl8er

    23. April 2017 um 0:32 Uhr

  • In Ordnung, ich habe die „cors“-Registrierung und die Cors-Klasse entfernt. die Route-Gruppe entfernt. die Header der Anforderungsaktion entfernt. Alles, was ich habe, ist dies für die vom Kernel geschützte $middleware = [ … \Barryvdh\Cors\HandleCors::class ]; Immer noch kein Glück 🙁

    – Kerry Ritter

    23. April 2017 um 0:40 Uhr


  • Mein Problem wurde gelöst: Ich habe “Barryvdh\Cors\ServiceProvider::class” nicht zum Provider-Array config/app.php hinzugefügt.

    – Kerry Ritter

    9. Januar 2018 um 21:18 Uhr

Benutzeravatar von Rahul Hirve
Rahul Hirve

Wenn Sie verwenden Laravel 5.5 & Laravel 5.x und vor dem gleichen Problem wie No 'Access-Control-Allow-Origin' header is present on the requested resource. Verwenden Sie einfach das folgende Paket und konfigurieren Sie Ihr System.

Schritt 1:

composer require barryvdh/laravel-cors

Schritt 2

Sie müssen auch hinzufügen Cors\ServiceProvider zu deinem config/app.php Anbieter-Array:

FruitCake\Cors\CorsServiceProvider::class,

Erlauben CORS fügen Sie für alle Ihre Routen die hinzu HandleCors Middleware im $middleware Eigentum von app/Http/Kernel.php Klasse:

Für globale Anwendungen:

protected $middleware = [
    // ...
    \Fruitcake\Cors\HandleCors::class,
];

Für Middleware-Anwendungen:

protected $middlewareGroups = [
   'web' => [
       // ...
   ],

   'api' => [
        // ...
        \Fruitcake\Cors\HandleCors::class,
    ],
];

Schritt 3

Führen Sie nach Abschluss der Installation den folgenden Befehl aus, um die Herstellerdateien zu veröffentlichen.

php artisan vendor:publish --provider="Fruitcake\Cors\ServiceProvider"

Ich hoffe, diese Antwort hilft jemandem, der vor dem gleichen Problem steht wie ich.

  • in config/app.php müssen wir diese Fruitcake\Cors\CorsServiceProvider::class hinzufügen,

    – Elbi

    6. Januar 2020 um 9:58 Uhr

  • Bezug: github.com/fruitcake/laravel-cors

    – Gato de Schrödinger

    13. September um 17:25 Uhr

Laravel schränkt die ursprungsübergreifende Anfrage aufgrund von Sicherheitsproblemen standardmäßig ein. Wir müssen eine Cors-Middleware erstellen, um die Anfrage von einem anderen Ursprung zu akzeptieren.

Schritt 1: Erstellen Sie Cors-Middleware.

php artisan make:middleware Cors

Schritt 2: Fügen Sie vor der Rückkehr die folgenden Zeilen in der Handle-Funktion hinzu.

//header('Access-Control-Allow-Origin:  *');
header('Access-Control-Allow-Origin:  http://localhost:4200');
header('Access-Control-Allow-Headers:  Content-Type, X-Auth-Token, Authorization, Origin');
header('Access-Control-Allow-Methods:  POST, PUT');

Schritt 3: Registrieren Sie die Middileware in der Datei app/Http/Kernel.php.

Add below line in $middleware array 

\App\Http\Middleware\Cors::class,

Schritt 4: Jetzt müssen wir die Middleware in der Datei app/Http/Kernel.php aufrufen

Add below line in $routeMiddleware array 

'cors' => \App\Http\Middleware\Cors::class,

  • Danke, das war das einzige was bei mir funktioniert hat. Ich glaube, die anderen Antworten (oder Dinge, die ich online gesehen habe) erwähnen nicht die Tatsache, dass wir die Middleware zu hinzufügen müssen $middleware Reihe.

    – Herr Cujo

    10. November 2019 um 18:09 Uhr

  • Vielen Dank Ohne ein Paket zu verwenden, hat es funktioniert.

    – Varun Pradhan

    17. November 2019 um 16:26 Uhr

  • Verwendung der * funktioniert eher als der Host-Ursprung. Fehlte die Cors.php middleware in the array as well Vielen Dank

    – José Mhlanga

    3. Mai 2020 um 22:19 Uhr

  • Es ist die EINZIGE Arbeitsmethode. Viele falsche Ressourcen im Web.

    – ldmuniz

    15. August 2020 um 0:01 Uhr

  • Ist das auf jeden Fall schlecht für Websites in der Produktion? Ich meine, beeinträchtigt es die Sicherheit in irgendeiner Weise?

    – Sagte Mostafa

    12. Juli um 16:48 Uhr

https://github.com/barryvdh/laravel-cors

Mit dem Paket laravel-cors können Sie Cross-Origin Resource Sharing-Header mit Laravel-Middleware-Konfiguration senden.

Merkmale

Verarbeitet CORS-Preflight-OPTIONS-Anfragen. Fügt Ihren Antworten CORS-Header hinzu

  • Mein Problem wurde gelöst: Ich habe “Barryvdh\Cors\ServiceProvider::class” nicht zum Provider-Array config/app.php hinzugefügt.

    – Kerry Ritter

    9. Januar 2018 um 21:17 Uhr

Ich bin kürzlich in Laravel 5.4 auf diesen Fehler gestoßen, ich habe eine Ajax-Post-Anforderung an meine eigene Website gesendet und immer noch denselben Fehler erhalten. Ich habe diesen Fehler aus zwei Gründen erlebt, um genau zu sein.

error: XMLHttpRequest cannot load https://[mydomain].com/quote/short. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://[mydomain].com' is therefore not allowed access.

Der Grund für den obigen Fehler war, dass ich eine Anfrage an die http-Domain von der https-Domain gepostet habe. Als ich sie in https geändert habe, wurde der Fehler behoben, dann habe ich aus ähnlichen Gründen wieder den gleichen Fehler erhalten, was der Grund war Zeit hatte die Domain www. und der angeforderte tat es nicht, nachdem ich hinzugefügt hatte www. für beide wirkte es wie ein Zauber.

Und für ursprungsübergreifende Anfragen habe ich folgende Lösung verwendet:

  1. Erstellen Sie eine Middleware (in meinem Fall cors) mit dem folgenden Code

    return $next($request)
        ->header('Access-Control-Allow-Origin', '*')
        ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
    
  2. Fügen Sie Middleware in das routeMiddleware-Array in kernal.php ein

    'cors' => \App\Http\Middleware\Cors::class,

  3. Fügen Sie der respektierten Route Middleware hinzu

    Route::get('myRoute', ['middleware' => 'cors' , 'uses'=> 'MyController@Action']

Ich hoffe, diese Antwort hilft jemandem, der vor dem gleichen Problem steht wie ich.

ok, hier ist mein versuch. Wenn ich mit falschem Token an die geschützte API poste, Passrückgabe 401 mit {“message”:”Unauthenticated.”}

Da bei der Antwort jedoch kein Cors-Header vorhanden ist, erhält meine Vue-App einen CORS-Fehler und kann den Antwortcode nicht verarbeiten.

Fügen Sie also bei Laravel 5.8 auf http/kernel.php $middlewarePriority \Barryvdh\Cors\HandleCors::class vor \App\Http\Middleware\Authenticate::class hinzu

hier ist mein Code:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:300,1',
        'Localization',
        'bindings',
        'cors'
    ],
];

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

    // Add Localization MiddleWare
    'Localization' => \App\Http\Middleware\localization::class,
    'cors' => \Barryvdh\Cors\HandleCors::class,
];

protected $middlewarePriority = [
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,

    //add to handle cors before authenticate
    \Barryvdh\Cors\HandleCors::class,

    \App\Http\Middleware\Authenticate::class,
    \Illuminate\Session\Middleware\AuthenticateSession::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    \Illuminate\Auth\Middleware\Authorize::class,
];

hoffe, das hilft jemand anderem

Benutzeravatar von Muhammad Ahmad
Mohammed Ahmad

Die einfache Antwort ist, den Access-Control-Allow-Origin-Header auf localhost oder *. So mache ich es normalerweise: Erstellen Sie eine einfache Middleware namens Cors:

php artisan make:middleware Cors

Fügen Sie den folgenden Code hinzu app/Http/Middleware/Cors.php:

public function handle($request, Closure $next)
{
    return $next($request)
        ->header('Access-Control-Allow-Origin', '*')
        ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
}

Sie können das * durch ersetzen localhost oder behalte es so wie es ist.

Der nächste Schritt ist das Laden der middleware. Fügen Sie die folgende Zeile hinzu $routeMiddleware Array ein app/Http/Kernel.php.

'cors' => \App\Http\Middleware\Cors::class, 

Und der letzte Schritt besteht darin, die Middleware auf den Routen zu verwenden, für die Sie die Zugriffsursprungsheader festlegen möchten. Angenommen, Sie sprechen über die neuen API-Routen in Laravel 5.3, der richtige Ort dafür ist app/Providers/RouteServiceProvider.phpinnerhalb der mapApiRoutes() Funktion (Sie können den vorherigen Code der Funktion entfernen oder kommentieren):

Route::group([
        'middleware' => ['api', 'cors'],
        'namespace' => $this->namespace,
        'prefix' => 'api',
    ], function ($router) {
         //Add you routes here, for example:
         Route::apiResource('/posts','PostController');
    });

Stevens Benutzeravatar
Stefan

Ich arbeitete an einem zusammengesetzten Projekt-Frontend Reactjs und Laravel-Backend, als ich auf die stieß “Preflight-Anfrage besteht Zugriffskontrollprüfung nicht: Kein ‘Access-Control-Allow-Origin'”.
Ich habe das Problem gelöst, indem ich den Cache der bereitgestellten Reactjs-App auf Heroku geleert habe.

Wie lösche ich den Build-Cache?

1405890cookie-checkKein ‘Access-Control-Allow-Origin’-Header – Laravel

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy