Две авторизации в advanced

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

Две авторизации в advanced

Сообщение Vitek25 » 2019.07.11, 16:34

Добрый день, господа!
Столкнулся с проблемой, что авторизация backend перезатирает авторизацию frontend.
Т.е я авторизуюсь на сайте, для того что бы оставить отзыв. Берется клиент из таблицы clients.
Потом я авторизуюсь в админке(backend). Берется пользователь из таблицы accounts.
Захожу на сайт, оставляю отзыв, тянется клиент из таблице clients, но с айдишником, который был в таблице accounts.
Дальше не много конфигов и кода.

Для авторизации в админке использую компонент user, config его находится в backend/config/main.php

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

'user' => [
            'class' => 'yii\web\User',
            'identityClass' => 'common\models\Accounts',
            'loginUrl' => '/manage/auth/login',
            'enableAutoLogin' => true,
            'authTimeout' => 31536000,
            'identityCookie' => [
                'name' => '_identityBack',
                'httpOnly' => true,
                'path' => '/',
                'domain' => '.' . $params['domainName'],
            ],
        ],
В backend происходит авторизация так:

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

Yii::$app->user->login($this->getAccount(), (($this->rememberMe) ? 31536000 : 0)); //31536000 - 1 год
private function getAccount()
    {
    return Accounts::findOne(['account' => $this->account]);
    }
Есть еще одна авторизация во frontend, для того что бы покупатели могли оставлять отзывы товарам.
Конфиг лежит в frontend/config/main.php

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

'reviewUser' => [
            'class' => 'yii\web\User',
            'identityClass' => 'common\models\Clients',
            'loginUrl' => 'auth/index',
            'enableAutoLogin' => true,
            'identityCookie' => [
                'name' => '_identityFrontReview',
                'httpOnly' => true,
                'domain' => isset(Yii::$app->request->serverName)
                    ? Yii::$app->request->serverName
                    : '.'.$params['domainName'],
            ],
        ]
Для авторизации фронта использую authClients facebook и vk.
Сама авторизация происходит вот так

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

$auth = Auth::findOne([
            'source' => $this->authClient->getId(),
            'source_id' => $this->userAttr['id'],
        ]);
        if (Yii::$app->reviewUser->isGuest) {
            if (!isset($auth)) {
                $client = $this->singUp($client_id);// Добавляет клиента в таблицу clients на основе полученных данных из соц.сетей
            } else {
                $client = $auth->client;
            }
            Yii::$app->reviewUser->login($client, 36000);
        }
Пользователя на странице отзывов беру вот так

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

$user = Yii::$app->reviewUser->identity;

Ответить