Как добавить промежуточное ПО CORS с промежуточным ПО auth:api в Laravel?

Я использовал Laravel Passport для аутентифицированных конечных точек. Я столкнулся с проблемой CORS для этих API.

В приложении/Http/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', "PUT,POST,DELETE,GET,OPTIONS")
                ->header('Access-Control-Allow-Headers', "Accept,Authorization,Content-Type");
    }
}

В app/Http/Kernel.php добавлено в массив промежуточного ПО.

\App\Http\Middleware\Cors::class,

В маршрутах/api.php,

Route::post('auth/login', 'PassportController@login'); //working 
Route::middleware('auth:api')->group(function () {
Route::get('vehicle/all', 'VehicleController@getVehicles'); //not working: facing CORS error
});

Я использовал auth:api (паспорт Laravel) для авторизации. Я сталкиваюсь с ошибкой CORS для конечных точек в группе auth:api. Конечные точки, которые находятся за пределами группы, такие как «auth/login», работают нормально. Как обрабатывать ошибку cors внутри группы Route::middleware('auth:api')?

'Access-Control-Allow-Origin', "*" больше не принимается браузерами, нужно указать домен

N69S 25.12.2020 14:33
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
1
1 014
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно указать разрешенный домен, подстановочный знак «*» больше не принимается браузерами.

Если у вас есть несколько доменов, вызывающих ваш API, вы можете сделать его динамическим с помощью $_SERVER['HTTP_HOST']

<?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)
    {
        $domain = $request->getHost();
        // or $domain =  $_SERVER['HTTP_HOST'];
        return $next($request)
            ->header('Access-Control-Allow-Origin', $domain)
                ->header('Access-Control-Allow-Methods', "PUT,POST,DELETE,GET,OPTIONS")
                ->header('Access-Control-Allow-Headers', "Accept,Authorization,Content-Type");
    }
}

Спасибо @N69S. Задача решена. Я напрямую поместил URL-адрес домена в $domain и изменил Access-Control-Allow-Headers... header('Access-Control-Allow-Headers', "Accept,Authorization,Content-Type,Access-Control-Allow-Head‌​ ers,управление-доступом-методы-разрешения");

Swapnil S. 27.12.2020 08:05

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

Я просто установил пакет Промежуточное ПО CORS для Laravel и следовал документации, чтобы, наконец, добавить маршруты, к которым следует применять промежуточное ПО cors. И это сработало :)

Вот шаги:

Шаг 1: Установите пакет

composer require fruitcake/laravel-cors

Шаг 2:

Чтобы разрешить CORS для всех ваших маршрутов, добавьте промежуточное ПО HandleCors по адресу верхняя часть свойства $middleware класса app/Http/Kernel.php:

protected $middleware = [
  \Fruitcake\Cors\HandleCors::class,
    // ...
];

Шаг 3: Опубликуйте файл конфигурации

Значения по умолчанию установлены в config/cors.php. Опубликуйте конфигурацию для копирования файл в вашу собственную конфигурацию:

php artisan vendor:publish --tag = "cors"

Шаг 4: Обновите свой config/cors.php

Теперь обновите конфигурацию, чтобы определить пути, по которым вы хотите запустить CORS. обслуживание включено (см. Конфигурацию ниже):

'paths' => ['api/*'],

Надеюсь, это поможет и вам.

Другие вопросы по теме