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



在我的控制器中,我有以下代码:

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

在我的配置中:

...'authManager' => [
        'class' => 'yiirbacDbManager',
        'defaultRoles' => ['guest'],
    ],
 'user' => [
        'identityClass' => 'appmodulesusermodelsUser',
        'enableAutoLogin' => true,
        'enableSession' => false,
        'loginUrl' => null,
    ], ...

是否可以在初始化上获得身份?

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

当用户是访客(未登录)时,将返回null,因此请检查这一点。

public function init()
{
    parent::init();
    var_dump(Yii::$app->user->isGuest, Yii::$app->user->identity);
    exit();
}

您需要检查用户是否使用

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

最新更新