@cat_crash

Yii как сделать разные авторизации в разных модулях?

Есть сайт на Yii. На нем предполагается 2 источника авторизаци
- На самом сайте авторизация через социалки посредством модуля EAuth (habrahabr.ru/post/129804/)
- Есть панель управления для "поставщиков". Сделана в виде модуля. Там планируется обычная авторизация из базы локальных пользователей. Прикрутил www.yiiframework.com/extension/yii-user

В порсторах нашел про setStateKeyPrefix но по факту не помогает.

в модуле поставщиков
class CpModule extends CWebModule
{
 public function init()
        {

                        $this->setComponents(array(
                'errorHandler' => array(
                        'errorAction' => 'site/error'),
                'user' => array(
                        'class' => 'CWebUser',
                        'allowAutoLogin'=>true,
                         'stateKeyPrefix' => '_cp',
                        'loginUrl' => Yii::app()->createUrl('user/login'),
                )
            ));

                // this method is called when the module is being created
                // you may place code here to customize the module or the application

                // import the module-level models and components
                $this->setImport(array(
                        'cp.models.*',
                        'cp.components.*',
                        'application.modules.user.models.*',
                        'application.modules.user.components.*',
                ));
        }


в коде EAuth
protected function getStateKeyPrefix() {
                return '__eauth_' . $this->getServiceName() . '__';
        }

   protected function hasState($key) {
                $session = Yii::app()->session;
                $key = $this->getStateKeyPrefix() . $key;
                return isset($session[$key]);

        }


Авторизация проходит в обоих модулях, и если ты авторизовался на сайте то и автоматом в модуле, соответственно если в модуле то и сайт воспрринимает как удачно авторизовавшегося.
Как сделать так чтоб авторизация в модуле была только для модуля. На сайте - только для сайта
  • Вопрос задан
  • 2924 просмотра
Пригласить эксперта
Ответы на вопрос 2
XAKEPEHOK
@XAKEPEHOK
Была подобная ситуация. Слишком много проблем от одновременных авторизаций в рамках одного экземпляра приложения. Попробуйте разбить приложения на части в соответствии с www.yiiframework.com/wiki/63 так у вас одна часть приложения не будет зависеть от другой, и настроить все сможете без проблем
Ответ написан
Комментировать
@DjSebas
Во первых, попробуйте в setComponents вторым параметром передать false. Это заставит модуль именно заменить компонент, а не смержить.
Если это не поможет, как вариант, можно зарегистрировать 2 компонента WebUser под разными именами. Соответственно в зависимости от контекста, использовать нужный компонент.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы