select2 ajax запрашивает пароль и логин для авторизации

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

select2 ajax запрашивает пароль и логин для авторизации

Сообщение iamguruman »

Вываливается акно авторизации при работе с select2 от kartik в случае когда авторизован

Ход моих действий такой:

Зашел на страницу https://xx.ru/order/view?id=123

В контроллере OrderController стоит поведение проверки авторизации:

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

use yii\web\Controller;
...
class OrderController extends Controller
{
    /**
     * {@inheritdoc}
     */
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['@']
                    ],
                ],
            ],
        ];
    }
перекинуло на страницу авторизации и попросило авторизацию,

код авторизации:

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

       if ($model->load(Yii::$app->request->post()) && $model->login()) { return $this->goBack(); } 
из пост получил имя пользователя и пароля и сделал логин

Теперь я авторизован, на страницу /order/view/id?=123 запустил и показал информацию о заказе

Далее жму Редактировать и перехожу на страницу с методом actionUpdate в том же контроллере

Рендерится вьюшка update с _form с кодом селект2 от картика:

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

$form->field($model, 'tcejbo_id')->widget(\kartik\select2\Select2::className(), [
        'initValueText' => empty($model->tcejbo) ? '' : $model->tcejbo->name,
        'options' => [
            'placeholder' => 'выбрать',
        ],
        'pluginOptions' => [
            'allowClear' => true,
            'minimumInputLength' => 2,
            'ajax' => [ // << это опция для работы с получением данных аяксом
                'url' => '/this-is-api-url/get-tcejbo',
                'dataType' => 'json',
                'data' => new \yii\web\JsExpression('function(params) { return {q:params.term}; }'),
            ],
        ],
    ])
в плагинопшин прописана настройка работы с аяксом

в приложении я авторизован (как сказал выше), страница с редактированием открывается нормально,

встаю в поле с селект2 и ввожу два символа и происходит запрос контроллер actionGetTcejbo в ThisIsApiUrlController, код контроллера:

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

class ApiTeamController extends \yii\web\Controller
{

    public function behaviors()
    {
        return [

            [
                //'class' => HttpBearerAuth::className()
                'class' => CompositeAuth::className(),
                'authMethods' => [
                    'bearerAuth' => [
                        'class' => HttpBearerAuth::className(),
                        //'class' => MyBearerAuth::className(),
                    ],
                    'basicAuth' => [
                        'class' => HttpBasicAuth::className(),
                        'auth' => function ($username, $password) {
                            return User::checkLogin($username, $password);
                        },
                    ],
                    HttpBasicAuth::className()
                    //HttpBasicAuth::class
                ],

            ],
            [
                'class' => ContentNegotiator::className(),
                'formats' => [
                    'application/json' => Response::FORMAT_JSON,
                ],
            ],
        ];
    }
    
        public function actionGetTcejbo($q = null)
    {

        $searchModel = new actiontTcejboSearch();

        $dataProvider = $searchModel->search(Yii::$app->request->queryParams, [
            'qname' => $q
        ]);
        $dataProvider->pagination = false;


        /** @var TeamUser[] $models */
        $models = $dataProvider->getModels();

        $return = [];

        foreach ($models as $model) {
            $return [] = [
                'id' => $model->id,
                'text' => $model->name,
            ];
        }

        return ['results' => $return];

    }
    
выкидывается запрос авторизации: https://prnt.sc/26rvj1q
такой запрос один раз в несколько недель запрашивается, не засекал время... но не часто, но все равно не удобно, ведь уже авторизован... видимо каким-то другим методом... через куки может быть... не понимаю...

не понимаю как исправить... поидее я уже авторизован, но я так понимаю ему нужна на этапе аторизации model->login() авторизация basicauth...

не понимаю и не могу связать воедино, чтобы поправить...
возможно где-то что-то не подключил?? помогите, пожалуйста
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: select2 ajax запрашивает пароль и логин для авторизации

Сообщение maleks »

Эти контроллеры в одном приложении?
Так то результат логичен, рест вот эта аутентификация, что вы подключили, основана не на куках или сессиях.
Этот апи контроллер еще снаружи запрашивается, поэтому вы ему эти фильтры указали?

Может в ApiTeamController::behaviors() те фильтры ваши подключать только если Yii::$app->isGuest ?
Как временное решение, сам не встречал как точно работать с api у себя в проекте когда это все в одном приложении.
По идее, просто AccessControl, как и везде
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

Re: select2 ajax запрашивает пароль и логин для авторизации

Сообщение iamguruman »

maleks писал(а): 2022.02.10, 08:09 Эти контроллеры в одном приложении?
да
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

Re: select2 ajax запрашивает пароль и логин для авторизации

Сообщение iamguruman »

maleks писал(а): 2022.02.10, 08:09 Этот апи контроллер еще снаружи запрашивается, поэтому вы ему эти фильтры указали?
угу, рест апи
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

Re: select2 ajax запрашивает пароль и логин для авторизации

Сообщение iamguruman »

maleks писал(а): 2022.02.10, 08:09 Может в ApiTeamController::behaviors() те фильтры ваши подключать только если Yii::$app->isGuest ?
попробую...

имхо, для рест запроса юзер всегда будет гет... пока он не авторизуется для рест... его нужно как-то отдельно авторизовать что-ли... (что по сути сейчас и происходит)

возможно на этапе обработки метода с (User:findOne(id))->login()...
не пойму как сделать

сильной проблемы не вызывает это конечно, но имхо тут получается надо как-то авторизовывать пользователя и по бейсик авторизации чтоли одновременно... не понимаю, возможно просто какой-то параметр в web.php прописать надо... не соображу
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

Re: select2 ajax запрашивает пароль и логин для авторизации

Сообщение iamguruman »

maleks писал(а): 2022.02.10, 08:09 По идее, просто AccessControl, как и везде
поидее так то да... вот думаю может что в веб.пхп что-то прописать надо...
Ответить