Sprache:

Suche

Handhabung von CORS-Anfragen mit VueJS-Client und Laravel-API

  • Teilen:
Handhabung von CORS-Anfragen mit VueJS-Client und Laravel-API

Das Problem

Die Methode POST wird von Access-Control-Allow-Methods in der Preflight-Antwort nicht zugelassen.

Dieses Problem könnte Ihnen bei der Entwicklung einer Anwendung, die bei jedem Schritt aus API-Aufrufen besteht, schon einmal begegnet sein. Hier geht es um den VueJS-Client und die Laravel-API, um genau zu sein. Lassen Sie uns einige der möglichen Lösungen diskutieren, um dieses Verhalten anzugehen und es ein für alle Mal zu beheben.

Die Lösung? Lösungen*

Lösung # 01

Dies ist die einfachste, schmutzigste und dennoch schnellste Lösung für dieses Problem, fügen Sie einfach die folgenden Zeilen in Ihre web/routes.php Datei zu ermöglichen CORS für Ihre Anwendung.

header('Access-Control-Allow-Origin:  *');
header('Access-Control-Allow-Methods:  POST, GET, OPTIONS, PUT, DELETE');
header('Access-Control-Allow-Headers:  Content-Type, X-Auth-Token, Origin, Authorization');

Lösung # 02

Diese zweite Lösung kann für meinen Geschmack auch als schmutzig bezeichnet werden. Aber für schnelle Ergebnisse funktioniert sie gut. Fügen Sie den folgenden Code in den Anfang Ihrer public/index.php Datei und ersetzen Sie Ihre API- und Client-URIs, um CORS für Ihre Anwendung zu ermöglichen.

$allowedOrigins = array(
   '(http(s)://)?(www\.)?your_api_domain\.com', // Laravel API Domain
   'http://my_vue_client.dev' // VueJS CLient
);
if (isset($_SERVER['HTTP_ORIGIN']) && $_SERVER['HTTP_ORIGIN'] != '') {
   foreach ($allowedOrigins as $allowedOrigin) {
      if (preg_match('#' . $allowedOrigin . '#', $_SERVER['HTTP_ORIGIN'])) {
         header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
         header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
         header('Access-Control-Max-Age: 1000');
         header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
         break;
      }
   }
}

Lösung # 03

Erstellen Sie eine CORS-Middleware und stellen Sie dort alles ein, z. B.

php artisan make:middleware CorsMiddleware

Jetzt im Inneren des handle Methode der CorsMiddleware

header("Access-Control-Allow-Origin: *");

$headers = [
 'Access-Control-Allow-Methods'=> 'POST, GET, OPTIONS, PUT, DELETE',
 'Access-Control-Allow-Headers'=> 'Content-Type, X-Auth-Token, Origin'
];
if($request->getMethod() == "OPTIONS") {

 return response()->make('OK', 200, $headers);
}

$response = $next($request);
foreach($headers as $key => $value)
 $response->header($key, $value);
return $response;

Registrieren Sie die Middleware in app\Http\Kernel.php

protected $routeMiddleware = [
   'cors' => \App\Http\Middleware\CorsMiddleware::class,
];

Und verwenden Sie sie für Ihre Routen,

Route::middleware('cors')->group(function(){
   //your_routes
});

Lösung # 04

Sie können eines der Pakete verwenden, die speziell für die Handhabung von CORS verfügbar sind. Das folgende ist eines meiner Lieblingspakete für CORS, Sie können es auch ausprobieren.

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

Schlussfolgerung

Sie können jede der oben genannten Methoden verwenden, um das CORS-Problem in Ihrer Laravel-basierten Anwendung zu lösen. Wenn Sie einen anderen Ausweg als diese Ansätze haben, lassen Sie es uns im Kommentarbereich unten wissen.

Beachten Sie, dass alle oben genannten Lösungen erprobt und getestet sind und hervorragend funktionieren. Wenn Sie irgendwelche Fragen zu diesem Artikel haben, hinterlassen Sie uns einen Kommentar unten. Sie können uns auch folgen auf Twitter.

Usama Muneer

Usama Muneer

A web enthusiastic, self-motivated & detail-oriented professional Full-Stack Web Developer from Karachi, Pakistan with experience in developing applications using JavaScript, WordPress & Laravel specifically. Loves to write on different web technologies with an equally useful skill to make some sense out of it.