Как добавить заголовки CORS для предварительного запроса OPTIONS в Laravel Lumen 5.5.2 с angular4 в качестве внешнего интерфейса - PullRequest
0 голосов
/ 24 марта 2019

Я использую laravel lumen php frameowrk 5.5.2 на локальном хосте \ 8080 на моей машине. Я запускаю интерфейс angular4 локально на локальном хосте \ 4200. Когда я запускаю свое приложение, я могу подключиться к некоторым API Laravel через Angular и получить данные, а также я могу внести изменения в эти API. Но когда я пытаюсь подключиться к другому API-интерфейсу в Laravel через мой интерфейс, я получаю эту ошибку в консоли браузера: «Доступ к XMLHttpRequest в« http://localhost:8080/ABC' from origin »http://localhost:4200' был заблокирован политикой CORS: Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». "

Итак, я сослался на эту ссылку и внес соответствующие изменения в код внутреннего сервера Laravel, как они упоминали: https://gist.github.com/danharper/06d2386f0b826b669552#file-usage-md

Но потом, когда я подключаюсь к Laravel apis через angular, теперь я получаю эту ошибку: «Доступ к XMLHttpRequest в« http://localhost:8080/ABC' из источника »http://localhost:4200' заблокирован политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: он не имеет статуса HTTP ok.»

Кроме того, нужно ли мне вносить какие-либо изменения в угловой код переднего конца? Я не могу двигаться вперед из-за этой блокировки CORS ... Любая помощь будет принята с благодарностью.

Это мой файл CorsMiddleware.php в Laravel:

использовать Закрытие;

класс CorsMiddleware {

public function handle($request, Closure $next)
{

    $response = $next($request);
    $response->header('Access-Control-Allow-Methods', 'HEAD, GET, POST, PUT, 
    PATCH, DELETE');
    $response->header('Access-Control-Allow-Headers', $request- 
    >header('Access-Control-Request-Headers'));
    $response->header('Access-Control-Allow-Origin', '*');
    return $response;    
}

}

Это мой файл CatchAllOptionsRequestsProvider.php в Laravel:

/ ** * Если входящий запрос является запросом OPTIONS * мы зарегистрируем обработчик для запрошенного маршрута * /

Класс CatchAllOptionsRequestsProvider расширяет ServiceProvider {

public function register()
{
    $request = app('request');

    if ($request->isMethod('OPTIONS'))
    {
       app()->options($request->path(), function() { return response('', 
       200); 
    });
}

}

Это мой файл app.php, в котором я регистрирую своего провайдера и промежуточное ПО Cors:

$ app-> регистр (App \ Providers \ CatchAllOptionsRequestsProvider :: класс);

$ app-> routeMiddleware (['auth' => App \ Http \ Middleware \ Authenticate :: class,]);

$ app-> промежуточного слоя ([App \ Http \ Middleware \ CorsMiddleware :: класс]);

...