Я использовал 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')?
Вам нужно указать разрешенный домен, подстановочный знак «*» больше не принимается браузерами.
Если у вас есть несколько доменов, вызывающих ваш 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,управление-доступом-методы-разрешения");
Я столкнулся с той же проблемой, и решения, найденные здесь, не сработали для меня.
Я просто установил пакет Промежуточное ПО 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/*']
,
Надеюсь, это поможет и вам.
'Access-Control-Allow-Origin', "*" больше не принимается браузерами, нужно указать домен