为什么Yii2用户身份在控制器init()方法中为空?

时间:2016-01-26 14:22:13

标签: php yii2

在我的控制器中,我有这段代码:

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上获得身份吗?

2 个答案:

答案 0 :(得分:1)

我刚刚测试了在控制器的init()方法中获取用户身份,它运行正常。

当用户是访客(未登录)时,将返回

null,因此请检查。

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

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

答案 1 :(得分:0)

您需要检查用户是否使用

登录
Yii::$app->user->isGuest

如果返回true,则表示当前用户为guest,即用户尚未登录,您可以选择将用户重定向到登录页面。

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. 用户管理界面
  7. https://github.com/dektrium/yii2-user