Ich habe versucht, dieses Problem für eine Weile zu lösen, aber nicht in der Lage, es zu knacken.Laravel CORS Middleware schlägt fehl für Post und Ressourcenanforderung
Ich habe ein Laravel Backend und eckiges Frontend. Diese sind auf verschiedenen Domains, da die Frontends eine Web- und Mobile-Cordova-App sein müssen.
Auch nach CORS-Middleware, Post und Ressourcenanforderung nicht geladen und ich bekomme einen
No 'Access-Control-Allow-Origin' header is present on the requested resource
Fehler in der Konsole hinzugefügt wird.
Die folgende GET-Anfrage funktioniert gut: -
Route::get('example', ['middleware' => 'cors', function(){
return Response::json(array('name' => 'Steve Jobs 1', 'company' => 'Apple'));
}]);
Aber nach denen scheitern -
Route::group(['middleware' => 'cors'], function() {
Route::group(['prefix' => 'api'], function()
{
Route::resources('authenticate', 'AuthenticateController', ['only' => ['index']]);
Route::post('authenticate', '[email protected]');
});
});
I https://scotch.io/tutorials/token-based-authentication-for-angularjs-and-laravel-apps bin nach.
Mein CORS.php
class CORS
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
header("Access-Control-Allow-Origin: *");
// ALLOW OPTIONS METHOD
$headers = [
'Access-Control-Allow-Methods'=> 'POST, GET, OPTIONS, PUT, DELETE',
'Access-Control-Allow-Headers'=> 'Content-Type, X-Auth-Token, Origin'
];
if($request->getMethod() == "OPTIONS") {
// The client-side application can set only headers allowed in Access-Control-Allow-Headers
return Response::make('OK', 200, $headers);
}
$response = $next($request);
foreach($headers as $key => $value)
$response->header($key, $value);
return $response;
return $next($request);
}
}
kernal.php
class Kernel extends HttpKernel
{
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
/*\App\Http\Middleware\VerifyCsrfToken::class,*/
];
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class,
'cors' => 'App\Http\Middleware\CORS',
];
}
Können Sie angeben, welchen HTTP-Antwortcode Ihre Anfrage zurückgibt? Ich hatte kürzlich ein ähnliches Problem und meine Antworten gaben einen Code von 500 zurück, einen internen Serverfehler. Es stellte sich heraus, dass es nichts mit meinen Kopfzeilen zu tun hatte, sondern mit der Tatsache, dass ich CSRF nicht korrekt ausführte. Das Deaktivieren von CSRF hat es funktioniert. Vielleicht versuchen Sie das und sehen, ob es wirklich ein CORS-Problem ist oder etwas anderes wie in meinem Fall? –
Okay, ich sehe, wo Sie CSRF deaktivieren, also ist es das nicht. Dennoch könnte die Kenntnis des HTTP-Antwortcodes einen Einblick geben. –