2016-11-15 6 views
0

Я сделал много исследований, и я реализовал следующие промежуточное программное обеспечение, чтобы обойти ошибки CORS я получаю ...Laravel API CORS режим не работает

Middleware/Cors.php

<?php 
namespace App\Http\Middleware; 
use Closure; 

class Cors 
{ 
/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @return mixed 
*/ 
public function handle($request, Closure $next) 
{ 
    return $next($request) 
     ->header('Access-Control-Allow-Origin', '*') 
     ->header('Access-Control-Allow-Methods', 'GET,POST,PUT,PATCH,DELETE,OPTIONS') 
     ->header('Access-Control-Allow-Headers', 'content-type'); 
    } 
} 

?> 

Kernel .php

protected $routeMiddleware = [ 
    'auth' => \App\Http\Middleware\Authenticate::class, 
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 
    'cors' => App\Http\Middleware\Cors, 
]; 

routes.php

Route::post('/content', array('middleware' => 'cors', 'uses' => '[email protected]')); 

Кажется, что он настроен правильно. Но когда я делаю запрос с использованием выборки API ...

fetch('http://laravel.dev/content', { 
     method: 'POST', 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json', 
      'Access-Control-Allow-Origin':'*' 
     }, 
     body: JSON.stringify({ 

     }) 
    }) 
    //.then((response) => response.json()) 
    .then((response) => response.text()) 
    .then((text) => { 
     console.log(text); 
    }); 

Я все еще получаю эту ошибку ...

Fetch API cannot load http://laravel.dev/content. 
Response to preflight request doesn't pass access 
control check: No 'Access-Control-Allow-Origin' header 
is present on the requested resource. 

Я пытался добавить режим no-cors моей выборки ответа, и он работал, я получил непрозрачный ответ, но мне нужен режим cors, чтобы получить правильный запрос.

Может быть, стоит отметить, что мой App и мой Laravel restAPI расположены в одной и той же папке htdocs на XAMPP. Я не уверен, что это проблема.

Я также попытался добавить заголовки в верхней части моего файла Routers.php, но я все равно получаю ту же ошибку. Можно ли настроить restAPI с помощью laravel?

+0

Для CORS вы можете попробовать это GitHub [ репо (https://github.com/barryvdh/laravel-cors)]. Он очень прост в использовании и работает в моих проектах. –

+0

Этот заголовок не должен существовать в заголовках запроса: Access-Control-Allow-Origin – schellingerht

+0

Согласитесь с вышесказанным. Также для меня это должно было быть частью глобальной группы промежуточного программного обеспечения – tam5

ответ

0

Попытка удалить

->header('Access-Control-Allow-Headers', 'content-type'); 

в классе Корс как этот

<?php 
    namespace App\Http\Middleware; 
    use Closure; 

    class Cors 
    { 
     /** 
     * Handle an incoming request. 
     * 
     * @param \Illuminate\Http\Request $request 
     * @param \Closure $next 
     * @return mixed 
     */ 
     public function handle($request, Closure $next) 
     { 
      return $next($request) 
      ->header('Access-Control-Allow-Origin', '*') 
      ->header('Access-Control-Allow-Methods', 'GET,POST,PUT,PATCH,DELETE,OPTIONS'); 

     } 
    } 

?> 

Он работал на меня.Я надеюсь, что это полезно для вас