在 Yii2 Advanced 中使用多用户身份 Class 时登录后遇到身份对象问题
Facing issue with identity object after login while using Multiple User Identity Class in Yii2 Advanced
我有 setup/created 2 个用户身份 类,用于 config/main 下的 2 个不同登录。php 组件:
'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,
],
],
当我使用 franchise 登录时,登录后如果我检查 Yii::$app->user->identity
它会为我提供数据库中第一条记录的详细信息(反之亦然用户登录)。当我以 franchise 身份登录时,我想为 Yii::$app->user->identity
获取 null。
您 select 用户的第 1 个组成部分,用这个检查:
$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,
],
],
]);
}
并对另一个用户模块重复此操作。
当我们在配置中添加多个身份时,请更改其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,
],
],
我有 setup/created 2 个用户身份 类,用于 config/main 下的 2 个不同登录。php 组件:
'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,
],
],
当我使用 franchise 登录时,登录后如果我检查 Yii::$app->user->identity
它会为我提供数据库中第一条记录的详细信息(反之亦然用户登录)。当我以 franchise 身份登录时,我想为 Yii::$app->user->identity
获取 null。
您 select 用户的第 1 个组成部分,用这个检查:
$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,
],
],
]);
}
并对另一个用户模块重复此操作。
当我们在配置中添加多个身份时,请更改其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,
],
],