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 шт):

Автор решения: Moonwolf45

Всё я понял в чем проблема, я пытался отключить 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 во всех окружениях работал.

→ Ссылка