在 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当我以特许经营身份登录时,我想获取 null 。


翻阅古今
浏览 177回答 2
2回答

慕标琳琳

当我们在配置中添加多个身份时,请更改其idParam参数。'user' => [            'class'=>'yii\web\User',            'identityClass' => 'frontend\models\CustomerUser',            'enableAutoLogin' => false,            'authTimeout' => 60*30,            'loginUrl' => ['customer/login'],            'idParam' => '__cid',            'identityCookie' => [                'name' => '_panelCustomer',                'httpOnly' => true,            ],        ],        'franchise' => [            'class'=>'yii\web\User',            'identityClass' => 'frontend\models\FranchiseUser',            'enableAutoLogin' => false,            'authTimeout' => 60*30,            'loginUrl' => ['franchise/login'],            'idParam' => '__fid',            'identityCookie' => [                'name' => '_panelFranchise',                'httpOnly' => true,            ],        ],

跃然一笑

您选择用户的第一个组件,检查以下内容:$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,            ],        ],    ]);}对另一个用户模块重复此操作。
打开App,查看更多内容
随时随地看视频慕课网APP