2016-01-26 62 views
1

在我的控制器我有這樣的代碼:爲什麼Yii2用戶身份在控制器init()方法中爲null?

public function init() 
{ 
    parent::init(); 
    Yii::$app->user->identity // NULL ??? 
} 

public function actionIndex() 
{ 
    Yii::$app->user->identity // Identity object! 
} 

在我的配置:

...'authManager' => [ 
     'class' => 'yii\rbac\DbManager', 
     'defaultRoles' => ['guest'], 
    ], 

'user' => [ 
     'identityClass' => 'app\modules\user\models\User', 
     'enableAutoLogin' => true, 
     'enableSession' => false, 
     'loginUrl' => null, 
    ], ... 

有可能得到的init身份?

+0

嘗試使用'beforeAction()' – ineersa

回答

1

我剛剛測試得到用戶身份init()控制器的方法,它工作正常。

null當用戶是guest(未登錄)時返回,因此請檢查。

public function init() 
{ 
    parent::init(); 

    var_dump(Yii::$app->user->isGuest, Yii::$app->user->identity); 
    exit(); 
} 
0

你需要檢查用戶是否登錄使用

Yii::$app->user->isGuest 

如果返回true,則意味着當前用戶是來賓即用戶尚未被記錄,您可以選擇將用戶重定向到您的登錄頁面。

public function init() 
{ 
    parent::init(); 
     if (!\Yii::$app->user->isGuest) { 
      return true; 
     } 
     return $this->redirect(['/user/security/login']);//redirect to user login page 
} 

在同一張紙條上有一個很棒的yii2擴展,它具有以下用戶管理功能。

  1. 登記每個郵件的可選確認
  2. 通過社交網絡
  3. 密碼恢復
  4. 帳戶及資料管理
  5. 控制檯命令
  6. 用戶管理界面

https://github.com/dektrium/yii2-user

  • 註冊

  • +1

    除了提及擴展外,它與我的回答有什麼不同? – arogachev

    相關問題