Страница 1 из 1
авторизация CORS
Добавлено: 2020.05.20, 14:51
svisch
Здравствуйте. Есть backend на yii2 и front на vue.
Когда Vue запускаешь в режиме "npm run serve", (он при этом начинает работать с порта 8080 в время, как yii2 остается на другом порту) появляется ошибка CORS. Для обычных запросов get я победил добавлением в beheviors() настроек для CORS, но не могу победить авторизацию на сайте. Подскажите плиз куда копать?
Вот ошибка в консоли при попытке авторизации:
Код: Выделить всё
Access to XMLHttpRequest at 'http://localhost:8000/login' from origin 'http://localhost:8080' 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:160 POST http://localhost:8000/login net::ERR_FAILED
Re: авторизация CORS
Добавлено: 2020.05.26, 07:59
marsden
ну так надо настроить не только для GET, а для остальных тоже
Код: Выделить всё
public function behaviors()
{
$behaviors = parent::behaviors();
...
$behaviors['corsFilter'] = [
'class' => \yii\filters\Cors::class,
'cors' => [
'Origin' => ['*'],
'Access-Control-Allow-Origin' => ['*'],
'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
'Access-Control-Allow-Credentials' => null,
'Access-Control-Allow-Headers' => [
'Access-Control-Allow-Headers',
'Origin',
'Accept',
'X-Requested-With',
'Content-Type',
'Access-Control-Request-Method',
'Access-Control-Request-Headers',
'Authorization',
'Refresh-Token',
],
],
];
return $behaviors;
}
public function actions()
{
return [
'options' => [
'class' => 'yii\rest\OptionsAction',
],
];
}
В контроллере просто прописать все варианты и все. Я сделал один контроллер -наследник от yii\rest\Controller и уже от него создаю рабочие контроллеры, так что все они сразу имеют CORS
Re: авторизация CORS
Добавлено: 2020.05.28, 14:55
svisch
marsden писал(а): ↑2020.05.26, 07:59
ну так надо настроить не только для GET, а для остальных тоже
Код: Выделить всё
public function behaviors()
{
$behaviors = parent::behaviors();
...
$behaviors['corsFilter'] = [
'class' => \yii\filters\Cors::class,
'cors' => [
'Origin' => ['*'],
'Access-Control-Allow-Origin' => ['*'],
'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
'Access-Control-Allow-Credentials' => null,
'Access-Control-Allow-Headers' => [
'Access-Control-Allow-Headers',
'Origin',
'Accept',
'X-Requested-With',
'Content-Type',
'Access-Control-Request-Method',
'Access-Control-Request-Headers',
'Authorization',
'Refresh-Token',
],
],
];
return $behaviors;
}
public function actions()
{
return [
'options' => [
'class' => 'yii\rest\OptionsAction',
],
];
}
В контроллере просто прописать все варианты и все. Я сделал один контроллер -наследник от yii\rest\Controller и уже от него создаю рабочие контроллеры, так что все они сразу имеют CORS
Да я так делал уже, не помогло. Только 'Access-Control-Allow-Headers' => ['*'] указывал.
Если кому то поможет решил проблему добавлением в index.php строк:
Код: Выделить всё
// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN'])) {
// should do a check here to match $_SERVER['HTTP_ORIGIN'] to a
// whitelist of safe domains
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
}
Re: авторизация CORS
Добавлено: 2020.06.02, 12:18
marsden
точно, про index.php я забыл, там у меня одна строка только добавлена
header('Access-Control-Allow-Origin: *');