Cors запрос

Всё что касается построения API
Ответить
Аватара пользователя
darlov
Сообщения: 196
Зарегистрирован: 2012.01.31, 16:09

Cors запрос

Сообщение darlov » 2017.11.30, 17:25

Приветсвую!
Проблема, уже несколько дней бьюсь, и никак не могу победить проблему.
На локальном компьютера развернул два проекта frontend SPA на Vue и backend на Yii2. backend сервер на docker-compose= php7 nginx mysql.
frontend висит на http://localhost:8081
backend на http://localhost:8000
Отправляю с frontend запрос с токеном в заголовке, возвращает ответ
Failed to load http://localhost:8000/api/v1/user/index: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8081' is therefore not allowed access.
Вот мои настройки в Yii

Код: Выделить всё

class UserController extends RestController
{
    public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['authenticator']['except'] = ['list'];
        return $behaviors;
    }


    public function actionIndex()
    {
        $model = ['2'=>\Yii::$app->user->isGuest];
        return $model;
    }
}
class RestController extends Controller
{
    public static function allowedDomains()
    {
        return [
            //'*',
            'http://localhost:8081',
        ];
    }

    public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['authenticator'] = [
            'class' => CompositeAuth::className(),
            'authMethods' => [
                HttpBasicAuth::className(),
                HttpBearerAuth::className(),
                QueryParamAuth::className(),
            ],
        ];
        $behaviors['corsFilter'] = [
            'class' => \yii\filters\Cors::className(),
            'cors' => [
                'Origin' => static::allowedDomains(),
                'Access-Control-Request-Method' => ['POST', 'GET', 'PUT', 'DELETE', 'OPTIONS'],
                'Access-Control-Allow-Credentials' => true,
                'Access-Control-Max-Age' => 3600,
            ],
        ];
        return $behaviors;
    }

}
Что я делаю не так?

Nex-Otaku
Сообщения: 800
Зарегистрирован: 2016.07.09, 21:07

Re: Cors запрос

Сообщение Nex-Otaku » 2017.11.30, 18:04

Добавь

Код: Выделить всё

'Access-Control-Allow-Origin' => true,

Аватара пользователя
darlov
Сообщения: 196
Зарегистрирован: 2012.01.31, 16:09

Re: Cors запрос

Сообщение darlov » 2017.11.30, 19:12

Nex-Otaku писал(а):
2017.11.30, 18:04
Добавь

Код: Выделить всё

'Access-Control-Allow-Origin' => true,
Пробовал, сейчас еще раз попробовал, тоже самое. Не может ли причина быть nginx?

Nex-Otaku
Сообщения: 800
Зарегистрирован: 2016.07.09, 21:07

Re: Cors запрос

Сообщение Nex-Otaku » 2017.11.30, 20:42

Я бы на вашем месте сперва попробовал бы "authenticator" отключить, посмотреть, какие заголовки без него вернутся.

Аватара пользователя
darlov
Сообщения: 196
Зарегистрирован: 2012.01.31, 16:09

Re: Cors запрос

Сообщение darlov » 2017.11.30, 21:09

Nex-Otaku писал(а):
2017.11.30, 20:42
Я бы на вашем месте сперва попробовал бы "authenticator" отключить, посмотреть, какие заголовки без него вернутся.
Отключил
Вот результат:
http://joxi.ru/gmvW3a4FxG0P42
Если убираю с заголовка Bearer токен, то все нормально.

Nex-Otaku
Сообщения: 800
Зарегистрирован: 2016.07.09, 21:07

Re: Cors запрос

Сообщение Nex-Otaku » 2017.11.30, 21:20

Ну значит в него и копайте ) Удачи )

Аватара пользователя
darlov
Сообщения: 196
Зарегистрирован: 2012.01.31, 16:09

Re: Cors запрос

Сообщение darlov » 2017.11.30, 21:23

Nex-Otaku писал(а):
2017.11.30, 21:20
Ну значит в него и копайте ) Удачи )
Я уже куда только не копал, какими сторонними методами можно проверит cors?

noLogicOnlyWar
Сообщения: 70
Зарегистрирован: 2017.07.04, 20:53

Re: Cors запрос

Сообщение noLogicOnlyWar » 2017.12.01, 00:52

в связке angular 2-4 + lite-server - фронт/php бэк решал такие проблемы через прокси-мидлварю, которая перенаправляла запрос на сервер, как то так (в конфигах lite-server):

Код: Выделить всё

"middleware": {
      "1": proxyMiddleware('/api', {
        target: 'http://backend.api',
        changeOrigin: true,
        pathRewrite: {
          '^/api': '/v1'
        }
      })
    },
vue к сожалению не знаю, но думаю есть что-то подобное

undestroyer
Сообщения: 120
Зарегистрирован: 2014.01.06, 13:46

Re: Cors запрос

Сообщение undestroyer » 2017.12.05, 04:32

CORS фильтр в текущей версии Yii2 не может обработать запрос из браузера: https://github.com/yiisoft/yii2/pull/14618 Исправление намечено на версию 2.0.14, но это не точно

Аватара пользователя
darlov
Сообщения: 196
Зарегистрирован: 2012.01.31, 16:09

Re: Cors запрос

Сообщение darlov » 2017.12.05, 20:25

undestroyer писал(а):
2017.12.05, 04:32
CORS фильтр в текущей версии Yii2 не может обработать запрос из браузера: https://github.com/yiisoft/yii2/pull/14618 Исправление намечено на версию 2.0.14, но это не точно
О Да! Весьма благодарен.

Ответить