2012-12-15 49 views
1

我有管理模塊和不同的CWebUser(adminuser)該模塊。它適用於登錄。所以我可以在主應用程序和模塊中由不同的用戶登錄。但是,當我打電話註銷方法模塊yii。無法從模塊註銷

Yii::app()->getModule('admin')->adminuser->logout(); 

它記錄我從模塊和主要的應用程序也是如此。
我該如何解決它?
預先感謝。

+1

默認註銷將從用戶中刪除整個會話(請參閱http://www.yiiframework.com/doc/api/1.1/CWebUser#logout-detail)。 –

+0

謝謝。這有助於 Yii :: app() - > getModule('admin') - > adminuser-> logout(false); –

回答

1

我認爲關鍵是stateKeyPrefix它可以用來告訴不同的模塊使用不同的會話密鑰。 我會把main配置文件user一節。

'user' => [ 
    'allowAutoLogin' => true, 
    **'stateKeyPrefix' => 'YOUR-DEFAULT_',** 
    'loginUrl' => array('/login'), 
    'class' => 'application.wsi.auth.WSIWebUser', 
    'authTimeout' => 3600 * 24 // 1 hour 
], 

我有管理模塊,我會把我的AdminModule.php給你。

class AdminModule extends \CWebModule 
{ 
     public $defaultController = 'index'; 

     public function init() 
     { 
      $this->setImport(array(
      'admin.components.*', 
     )); 
      $this->layout = 'main'; 
      \Yii::app()->setComponents(array(
       'authManager' => array(
        'class' => 'CPhpAuthManager', 
        'authFile' => \Yii::getPathOfAlias('admin.data.auth') .'php', 
        'showErrors' => true, 
      ), 
       'user' => array(
        'stateKeyPrefix' => 'admin_', 
        'loginUrl' => \Yii::app()->createUrl('/admin/index/login'), 
        'class' => 'AdminWebUser', 
        'authTimeout' => 3600 * 24 // 1 day 
      ), 
     ), false); 

     } 

} 

components文件夾中admin模塊AdminWebUser類它。

class AdminWebUser extends \CWebUser { 

    public function getId() { 
     return Yii::app()->user->getState ('id'); 
    } 
    public function getName() { 
     return Yii::app()->user->getState ('name'); 
    } 

    public function getRole() { 
     return Yii::app()->user->getState ('role'); 
    } 

    public function getEmail() { 
     return Yii::app()->user->getState ('email'); 
    } 
} 

登錄和註銷控制器代碼的其餘部分是相同的。 希望它有幫助。如果沒有,請讓我知道。