В предполетном запросе CORS отказано

#php #laravel #ionic-framework #cors #middleware

#php #laravel #ionic-framework #cors #промежуточное программное обеспечение

Вопрос:

Существует API входа в систему и поместите его в промежуточное ПО CORS, чтобы запустить его из другого места, например —

 Route::group(['middleware' => ['cors']], function () { 
     Route::post('login', [AuthController::class, 'login']);
});
 

Промежуточное программное обеспечение cors записывается в $routeMiddleware в kernel.php « файл, как

 protected $routeMiddleware = [
    //some other middlewares 
    'cors' => AppHttpMiddlewareCors::class, 
];
 

И в том же файле переменная с именем $middleware определяется как

 protected $middleware = [
    // Some similar classes 
    FruitcakeCorsHandleCors::class,
];
 

И Cors.php содержит следующий код

 public function handle(Request $request, Closure $next)
{
    header("Access-Control-Allow-Origin: *");
    $headers = [
        'Access-Control-Allow-Methods'=> 'POST, GET, OPTIONS, PUT, DELETE',
        'Access-Control-Allow-Headers'=> 'Content-Type, X-Auth-Token, Origin, Accept, Authorization'
    ];
    if($request->getMethod() == "OPTIONS") {
        return Response::make('OK', 200, $headers);
    }

    $response = $next($request);
    foreach($headers as $key => $value)
        $response->header($key, $value);
    return $response;
}
 

Теперь, когда я использую этот API входа в систему из мобильного приложения, он выдает следующую ошибку в системе

 Access to XMLHttpRequest at '.../laravel/public/api/login' from origin 'http://localhost:8100' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
 

И / или, другими словами, я не могу войти в систему.

Пожалуйста, помогите мне в решении этой проблемы. Спасибо.

Комментарии:

1. Предполетный запрос — это запрос ПАРАМЕТРОВ, убедитесь, что ваша система правильно его обрабатывает. (Прямо сейчас я вижу Route::post это только в вашей настройке CORS, поэтому я предполагаю, что ПАРАМЕТРЫ, вероятно, еще не обрабатываются правильно. Хотя я не знаю особенностей настроек в Laravel.)

2. используйте свой системный ip, если вы пытаетесь подключиться к локальному, например http:// yourip / api, не используйте localhost

3. Я обработал запрос ПАРАМЕТРОВ в Cors.php

Ответ №1:

Я думаю, вы, возможно, перепутали две разные реализации CORS.

Начиная с Laravel 7x, обработка CORS встроена в Laravel с использованием FruitcakeCorsHandleCors промежуточного программного обеспечения. Ваша конфигурация CORS обрабатывается в config/cors.php файле.

Вы можете удалить свой пользовательский AppHttpMiddlewareCors класс и просто обновить свой config/cors.php файл, чтобы включить доступные пути CORS. По умолчанию все ваши api маршруты уже включены.

Комментарии:

1. Хорошо, я удалил пользовательский 'cors' => AppHttpMiddlewareCors::class из kernel.php файл тогда как я должен использовать FruitcakeCorsHandleCors::class промежуточное программное обеспечение в api.php файл Или как я могу написать login api Route::post('login', [AuthController::class, 'login']); в api.php досье.

2. @dedrajsharma FruitcakeCorsHandleCors Промежуточное программное обеспечение уже является глобальным промежуточным программным обеспечением, определенным в вашем ядре. Вам не нужно пытаться назначать его каким-либо маршрутам. Однако вам необходимо обновить свой config/cors.php файл, чтобы включить любые маршруты, для которых вы хотите включить CORS. Если вы не изменили его, установка по умолчанию уже включена 'api/*' , поэтому все маршруты, определенные в вашем api.php файле маршрутов, уже будут работать.

3. @dedrajsharma Нет проблем. Я бы предложил пометить это как принятый ответ, чтобы другие знали, что он решил эту проблему, на случай, если они столкнутся с той же проблемой.

4. Да, спасибо, это то, что я сделал, но в моем случае все маршруты в api работают нормально, кроме того, который также находится внутри api, php. Можете ли вы пролить некоторый свет на это?