Одна авторизация на frontend и backend

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
d1mon
Сообщения: 2
Зарегистрирован: 2016.12.13, 14:01

Одна авторизация на frontend и backend

Сообщение d1mon »

Использую yii2, шаблон advanced. База пользователей одна на frontend и backend. Когда у frontend и backend были собственные страницы авторизации, то не было проблем. Потом я оставил авторизацию только в frontend, настройки сделал одинаковыми:

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

//backend/config/main.php
...
'user' => [
            'identityClass' => 'common\models\User',
            'identityCookie' => ['name' => '_identity-infosite', 'httpOnly' => true],
            'enableAutoLogin' => true,
            'loginUrl' => ['/../'], // Если нужна авторизация, то перенаправляем на frontend.
        ],
        'session' => [
            // this is the name of the session cookie used for login on the backend
            'name' => 'info-site',
        ],
...

//frontend/config/main.php
...
 'user' => [
            'identityClass' => 'common\models\User',
            'identityCookie' => ['name' => '_identity-infosite', 'httpOnly' => true],
            'enableAutoLogin' => true,
        ],
        'session' => [
            // this is the name of the session cookie used for login on the frontend
            'name' => 'info-site',
        ],
...
 
Оно работает так, как я хотел. Пользователь авторизовавшись в frontend, если имеет права на backend, то может туда спокойно входить. Проблема в том, что по истечении времени сессии, если попытаться обратиться к любой странице (контроллеру) backend, то пользователя перекидывает на frontend. Неприятно, когда работаешь например с редактором долго, потом пытаешься сохранить и тут такое. :shock:

Если до этого сессию обновить (обратиться в соседней вкладке браузера к любой странице frontend), то проблемы нет, переброс с backend на frontend не происходит.

Подскажите пожалуйста, что я не донастроил? С Yii2 знаком не очень давно. Тонкостей работы не знаю.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Одна авторизация на frontend и backend

Сообщение samdark »

Всё донастроили. Наверняка у вас где-то в frontend выставляется returnUrl, а так как у вас между двумя приложениями всё общее, URL для возврата тоже.
d1mon
Сообщения: 2
Зарегистрирован: 2016.12.13, 14:01

Re: Одна авторизация на frontend и backend

Сообщение d1mon »

Косяк был в том, что есть еще файлы локальных настроек main-local.php и там есть параметр cookieValidationKey. Был не внимателен, данный ключ оказался разным для frontend и backend.
Shketkol
Сообщения: 15
Зарегистрирован: 2016.04.10, 17:33

Re: Одна авторизация на frontend и backend

Сообщение Shketkol »

d1mon. А можно поп подробней как вы настроили розграничение
scarj
Сообщения: 4
Зарегистрирован: 2017.11.01, 11:47

Re: Одна авторизация на frontend и backend

Сообщение scarj »

Все еще актуально. В частности на примере Starter kit.
Как я понял, суть в том чтобы в конфигурационных файлах (config/web.php), в блоке components => [ request => ] указать единый cookieValidationKey и baseUrl.

С cookieValidationKey то все просто. Однако с baseUrl возникают проблемы, так как у frontend и backend они должны быть одинаковы, но находятся они в разных каталогах. Но даже в этом случае, если прописать единый baseUrl, при авторизации на одном из них (к примеру frontend), автоматически авторизация на (backend) не происходит, т.е. он тоже требует пароль и не пускает никуда дальше формы авторизации.
scarj
Сообщения: 4
Зарегистрирован: 2017.11.01, 11:47

Re: Одна авторизация на frontend и backend

Сообщение scarj »

Решение было найдено. Правда не без посторонней помощи. (Спасибо Андрею)

Описываю случай и способ решения. (Авторизация сразу на frontend и backend)
Так как frontend находится на основном сайте (site.lan), а
backend на поддомене (admin.site.lan) куки хранятся в разных местах.

Задача была сделать следующее. Пользователь авторизовавшись на "site.lan" должен сразу авторизоваться и на "admin.site.lan".
и на оборот.

Решение следующее. В конфигурационных файлах frontend и backend прописывается следующее.

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

$config = [
    // ...
    'components' => [
        // ...
        'user' => [
            'class' => 'yii\web\User',
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
            'loginUrl' => '/user/login',
            'identityCookie' => [ // <---- Это
                'name' => '_identity',
                'httpOnly' => true,
                'domain' => '.site.lan',   // <----- ваш основной домен
            ],
        ],
        'request' => [
            'cookieValidationKey' => 'your_validation_key'	// <----- Данный параметр должен быть единым для frontend и backend
        ],
        'session' => [					// <--- и вот это
            'cookieParams' => [
                'domain' => '.site.lan',	// <----- ваш основной домен
                'httpOnly' => true,
            ],
        ],

    ],
];

marsden
Сообщения: 23
Зарегистрирован: 2019.11.25, 09:28

Re: Одна авторизация на frontend и backend

Сообщение marsden »

scarj писал(а): 2019.11.19, 12:05
Решение следующее. В конфигурационных файлах frontend и backend прописывается следующее.
Я так понимаю, это прописывается в main.php? Тогда в main-local.php надо надо убрать этот код? Чтобы cookieValidationKey не переопределялось?

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

$config = [
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => '**************',
        ],
    ],
];
бездумный копипаст приводит к безумным результатам
Ответить