Аутентификация в REST api Yii2

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
voodooism
Сообщения: 48
Зарегистрирован: 2018.11.12, 10:29

Аутентификация в REST api Yii2

Сообщение voodooism »

пытаюсь разобраться с REST api в Yii2

При обращении к контроллеру, получаю следующую ошибку:

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

<name>Invalid Configuration</name>
<message>User::identityClass must be set.</message>
<code>0</code>
<type>yii\base\InvalidConfigException</type>
Если мой API будет отрытым для всех желающих, то зачем мне вообще нужен User:identityClass? У меня ведь даже модели User нету в системе.

контроллер примитивный:

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

class TestController extends  \yii\rest\Controller
{
    public function actionTest()
    {
        $test = Test::findAll();
        return $test;
    }
}
Причём, если я наследуюсь от yii\web\Controller - то эта ошибка пропадает.


конфиг проекта следующий:

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

return [
    'id' => 'test-api',
    'basePath' => dirname(__DIR__),
    'components' => [
        'urlManager' => [
            'enablePrettyUrl' => true,
            'enableStrictParsing' => true,
            'showScriptName' => false,
            'rules' => [
                [
                    'class' => UrlRule::class,
                    'controller' => ['test' => 'test'],
                    'extraPatterns' => [
                        'GET test' => 'test'
                    ]
                ]
            ]
        ],
        'db' => $db
    ],
    'params' => $params,
];
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

Re: Аутентификация в REST api Yii2

Сообщение proctoleha »

voodooism писал(а): 2019.01.25, 15:23 Если мой API будет отрытым для всех желающих
То это не REST api, это что-то другое. Какая-то др. сущность. Даже на могу представить какая, открытая для всех ботов и спамеров.
И, да, класс User в yii2 есть изначально.
Yii::$app->user;
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Аутентификация в REST api Yii2

Сообщение someweb »

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

class TestController extends \yii\rest\Controller
{

    public function behaviors()
    {
        $behaviors = parent::behaviors();
        unset($behaviors['rateLimiter']);
        return $behaviors;
    }

    public function actionTest()
    {
        $test = Test::findAll();
        return $test;
    }

}
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
azz
Сообщения: 197
Зарегистрирован: 2016.07.06, 17:20

Re: Аутентификация в REST api Yii2

Сообщение azz »

оставьте модель User, просто не используйте её
voodooism
Сообщения: 48
Зарегистрирован: 2018.11.12, 10:29

Re: Аутентификация в REST api Yii2

Сообщение voodooism »

Нашел более ищяное решение:

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

public function behaviors()
    {
        return [
            'authenticator' => [
                'class' => CompositeAuth::className(),
                'authMethods' => []
            ],
        ];
    }
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Аутентификация в REST api Yii2

Сообщение someweb »

Нет, у CompositeAuth и так authMethods по умолчанию пустые

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

class CompositeAuth extends AuthMethod
{
    /**
     * @var array the supported authentication methods. This property should take a list of supported
     * authentication methods, each represented by an authentication class or configuration.
     *
     * If this property is empty, no authentication will be performed.
     *
     * Note that an auth method class must implement the [[\yii\filters\auth\AuthInterface]] interface.
     */
    public $authMethods = [];
Вы просто переопределили behaviors() и тем самым убрали rateLimiter, а заодно выкинули

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

            'contentNegotiator' => [
                'class' => ContentNegotiator::className(),
                'formats' => [
                    'application/json' => Response::FORMAT_JSON,
                    'application/xml' => Response::FORMAT_XML,
                ],
            ],
            'verbFilter' => [
                'class' => VerbFilter::className(),
                'actions' => $this->verbs(),
            ],
Тогда уж возьмите обычный контроллер и допишите что надо в него.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Ответить