#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 apiRoute::post('login', [AuthController::class, 'login']);
в api.php досье.2. @dedrajsharma
FruitcakeCorsHandleCors
Промежуточное программное обеспечение уже является глобальным промежуточным программным обеспечением, определенным в вашем ядре. Вам не нужно пытаться назначать его каким-либо маршрутам. Однако вам необходимо обновить свойconfig/cors.php
файл, чтобы включить любые маршруты, для которых вы хотите включить CORS. Если вы не изменили его, установка по умолчанию уже включена'api/*'
, поэтому все маршруты, определенные в вашемapi.php
файле маршрутов, уже будут работать.3. @dedrajsharma Нет проблем. Я бы предложил пометить это как принятый ответ, чтобы другие знали, что он решил эту проблему, на случай, если они столкнутся с той же проблемой.
4. Да, спасибо, это то, что я сделал, но в моем случае все маршруты в api работают нормально, кроме того, который также находится внутри api, php. Можете ли вы пролить некоторый свет на это?