首页 > 解决方案 > 在 Yii2 Advanced 中使用多用户身份类时,登录后面临身份对象问题

问题描述

我在 config/main.php 组件下为 2 个不同的登录设置/创建了 2 个用户身份类:

'user' => [
            'class'=>'yii\web\User',
            'identityClass' => 'frontend\models\CustomerUser',
            'enableAutoLogin' => false,
            'authTimeout' => 60*30,
            'loginUrl' => ['customer/login'],
            'identityCookie' => [
                'name' => '_panelCustomer',
                'httpOnly' => true,
            ],
        ],
        'franchise'=>[
            'class'=>'yii\web\Franchise',
            'identityClass' => 'frontend\models\FranchiseUser',
            'enableAutoLogin' => false,
            'authTimeout' => 60*30,
            'loginUrl' => ['franchise/login'],
            'identityCookie' => [
                'name' => '_panelFranchise',
                'httpOnly' => true,
            ],
        ],

当我使用特许经营权登录时,登录后如果我检查Yii::$app->user->identity它会为我提供数据库中第一条记录的详细信息(反之亦然用于用户登录)。Yii::$app->user->identity当我以特许经营权登录时,我想为空。

标签: phpyii2

解决方案


您选择用户的第一个组件,请检查:

$user = Yii::$app->get('franchise');
$user->identity

但是,为此目的最好的解决方案是使用为用户单独配置的高级模板。

https://github.com/yiisoft/yii2-app-advanced

或者您可以在运行时使用模块并更改配置,在 Module.php 内部:

public function init() {
    parent::init();
    Yii::$app->setComponents([
        'user' => [
            'class'=>'yii\web\Franchise',
            'identityClass' => 'frontend\models\FranchiseUser',
            'enableAutoLogin' => false,
            'authTimeout' => 60*30,
            'loginUrl' => ['franchise/login'],
            'identityCookie' => [
                'name' => '_panelFranchise',
                'httpOnly' => true,
            ],
        ],
    ]);
}

并对另一个用户模块重复此操作。


推荐阅读