2016-08-03 41 views
1

habe ich eine Anwendung in AngularJS und ich versuche, Anrufe an die Laravel API zu machen:CORS (Access-Control-Allow-Origin) auf Laravel

verwende ich Laravel API Boilerplate (JWT Edition) API.

Aber ich bekomme diese Fehlermeldung im Browser-Konsole:

XMLHttpRequest nicht http://localhost:8000/api/auth/login laden kann. Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden. Ursprung 'http://localhost:8080' ist daher nicht erlaubt.

Ich habe versucht, die Cors Middleware (Barryvdh/Laravel-Cors) in api_routes.php anzuwenden, aber der Fehler bleibt.

api_routes.php:

<?php 

$api = app('Dingo\Api\Routing\Router'); 

$api->version('v1', ['middleware' => 'cors'], function ($api) { 

    $api->post('auth/login', 'App\Api\V1\Controllers\[email protected]'); 
    $api->post('auth/signup', 'App\Api\V1\Controllers\[email protected]'); 
    $api->post('auth/recovery', 'App\Api\V1\Controllers\[email protected]'); 
    $api->post('auth/reset', 'App\Api\V1\Controllers\[email protected]'); 

    // example of protected route 
    $api->get('protected', ['middleware' => ['api.auth'], function() {  
     return \App\User::all(); 
    }]); 

    // example of free route 
    $api->get('free', function() { 
     return \App\User::all(); 
    }); 

}); 

Antwort

1

Ich bin völlig falsch über diese Umsetzung. Der Header origin hat einen speziellen Platzierungsfall in Laravel, wo andere Header in Middleware definiert werden können, der Header kann nicht.

Stattdessen müssen Sie diese an die Spitze der Haupt routes.php Datei hinzufügen:

header('Access-Control-Allow-Origin: http://localhost:8080'); 
+0

Hi @ Ohgodwhy Ich versuchte dies, und versuchen Sie es erneut, nachdem Sie antworten und der Fehler geht weiter. Ich habe keine Ahnung, was in meiner AngularJS-Anwendung ich brauche nichts zu ändern, ok? –

+0

@MateusVitali Sehen Sie mein Update, ich habe gerade ein paar Tests gemacht und was ich gefunden habe, ist, dass der 'Origin'-Header in Ihrer' routes.php' Datei (oder früher) gesetzt sein muss, um korrekt angewendet zu werden. Andere Header können für die Antwort in Middleware festgelegt werden. Ich bin mir noch nicht 100% sicher warum, aber das habe ich gefunden. Gib das einen Schuss. – Ohgodwhy

+0

Erfolglos :( https://s31.postimg.org/t2hs4e18r/error.png –

0

ich das nicht ganz verstehen, aber wenn ich Zugriff Cross-Browser wollen füge ich eine .htaccess-Datei in die Ordner, in dem mein Endpunkt mit den folgenden darin ist:

Header add Access-Control-Allow-Origin "*" 
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 
0

sollten Sie einen nginx virtuellen Host der auf Ihre api mit einem Proxy-Pass hinzuzufügen. im Wesentlichen müssen Sie sicherstellen, dass sowohl Ihre Front-und Backend sind aus der gleichen Domäne

+0

Aber ich wünschte, ich könnte in andere Domäne setzen. –