Cors на реальном сервере
Вообщем написал свой приложение на vuejs, backend на yii2, на локали проверил всё работает. Выкладываю на сервер и у меня начаниают лететь ошибки cors, такого вида:
Access to XMLHttpRequest at 'https://api.homebookkeeping.ru/api/v1/users/login' from origin 'https://homebookkeeping.ru' 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.
xhr.js:177 POST https://api.homebookkeeping.ru/api/v1/users/login net::ERR_FAILED
А обший контьроллер для корс настроен вот так:
/**
* @return array|array[]
*/
public function behaviors(): array {
$behaviors = parent::behaviors();
if (isset($behaviors['contentNegotiator']['formats']['application/xml'])) {
unset($behaviors['contentNegotiator']['formats']['application/xml']);
}
$behaviors['contentNegotiator'] = [
'class' => ContentNegotiator::class,
'formats' => [
'application/json' => Response::FORMAT_JSON,
],
'languages' => ['ru_RU', 'en_US']
];
if (YII_ENV_DEV) {
$behaviors['corsFilter'] = [
'class' => Cors::class,
'cors' => [
'Origin' => [Yii::$app->params['domain_dev'], Yii::$app->params['domain_prod']],
'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
'Access-Control-Request-Headers' => ['*'],
'Access-Control-Allow-Credentials' => true,
'Access-Control-Max-Age' => 86400,
'Access-Control-Expose-Headers' => []
]
];
}
$behaviors['authenticator'] = [
'class' => HttpBearerAuth::class,
'except' => ['options']
];
return $behaviors;
}
В самом контроллере это выглядит так:
/**
* @return array|array[]
*/
public function behaviors(): array {
$behaviors = parent::behaviors();
$availableToEveryone = ['options', 'login', 'registration', 'forgot-password', 'user-exists'];
$behaviors['authenticator'] = [
'class' => HttpBearerAuth::class,
'except' => $availableToEveryone
];
return $behaviors;
}
Может я что-то не так делаю, куда смотреть ??
Самое интересное раньше всё работало, но я перезалил парочку изменений.
Ответы (1 шт):
Всё я понял в чем проблема, я пытался отключить cors поэтому у меня были вылазила данная ошибка.
Как ршаем заходим в главный контроллер где у нас объявляетя cors и саму его функцию переписываем так:
if (!YII_ENV_DEV) {
$behaviors['corsFilter'] = [
'class' => Cors::class,
'cors' => [
'Origin' => [Yii::$app->params['domain_dev'], Yii::$app->params['domain_prod']],
'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
'Access-Control-Request-Headers' => ['*'],
'Access-Control-Allow-Credentials' => true,
'Access-Control-Max-Age' => 86400,
'Access-Control-Expose-Headers' => []
]
];
}
Либо можно вообще стереть этот if, чтобы cors во всех окружениях работал.