Опять гребанный CORS вылез неожиданно

Всё что касается построения API
Ответить
marsden
Сообщения: 23
Зарегистрирован: 2019.11.25, 09:28

Опять гребанный CORS вылез неожиданно

Сообщение marsden »

Всем трям.
Готовый REST API, работает больше полугода. И тут начались странности в фронтэндом. Решил на бэке сделать вывод в логи содержимого POST запроса из одного контроллера. И вот тут уже начались странности с CORS.
Контроллер представлял собой практически пустую болванку

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

<?php


namespace api\controllers;


use api\components\RestJWTActiveController;
use api\models\MsoLadaSitechecks;

class MsoladasitechecksController extends RestJWTActiveController
{
    public $modelClass = MsoLadaSitechecks::class;

}
в конфиге тоже все стандартно, кусочек rules из urlManager

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

                [
                    'class' => UrlRule::class, 'controller' => 'msoladasitechecks', 'pluralize' => false,
                ],
RestJWTActiveController - наследник от ActiveController

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

class RestJWTActiveController extends ActiveController
{
    public $serializer = [
        'class' => 'yii\rest\Serializer',
        'collectionEnvelope' => 'items',
    ];

    public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['access'] = [
                'class' => 'yii\filters\ContentNegotiator',
                'formats' => [
                    'application/json' => Response::FORMAT_JSON,
                    'application/xml' => Response::FORMAT_JSON,
                ]
        ];

        $behaviors['authenticator'] = [
            'class' => JwtHttpBearerAuth::class,
            'optional' => [
                'options'
            ]
        ];

        $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;
    }
Вроде никакого криминала, стандартный CRUD работает, разработка идет в OpenServer и PhpStorm, то есть локальная машина она же сервер, сайт открывается по localhost:8080, ajax запрос к http://api.service.local/msoladasitechecks

Это цветочки. Ягодки начались после попытки в beforeAction вывести в лог соержимое запроса. То есть теперь такой контроллер выдает CORS error

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

<?php


namespace api\controllers;


use api\components\RestJWTActiveController;
use api\models\MsoLadaSitechecks;

class MsoladasitechecksController extends RestJWTActiveController
{
    public $modelClass = MsoLadaSitechecks::class;

    public function beforeAction($action)
    {
        if($action->id='create'){
            \Yii::error(\Yii::$app->request->post(),'before_action_post');
        }
        return parent::beforeAction($action); // TODO: Change the autogenerated stub
    }

}
при этом в логах при отсутствии beforeAction видно, что urlManager нормально резолвит msoladasitechecks/options и после добавления кода beforeAction вдруг начинает спотыкаться и выдавать method not allowed. Магия - это, конечно, здорово, но почему такое странное поведение при попытке переопределить метод, который никаким образом этого корса не касается.

Есть похожий контроллер, но там используется afterAction, замена в текущем контроллере на afterAction снимает проблему с CORS. Непонятно, почему. И как теперь быть, если надо обработать данные перед вызовом какого либо метода?
бездумный копипаст приводит к безумным результатам
phpshko
Сообщения: 260
Зарегистрирован: 2015.03.21, 02:49

Re: Опять гребанный CORS вылез неожиданно

Сообщение phpshko »

Скорее всего опечатка, нужно ==

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

if($action->id='create'){
marsden
Сообщения: 23
Зарегистрирован: 2019.11.25, 09:28

Re: Опять гребанный CORS вылез неожиданно

Сообщение marsden »

phpshko писал(а): 2021.09.28, 22:27 Скорее всего опечатка, нужно ==

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

if($action->id='create'){
Вот спасибо! чертов пых )) все не как у людей ))) глаз замыливается от переключения между языками ))
бездумный копипаст приводит к безумным результатам
Ответить