我正在尝试像传统的用户/管理系统一样设置Yii2高级版。前端将是/ user和后端将是/ admin,并将在数据库中使用它们各自的表(用户和管理员)。我还没有将前端和后端重命名为用户和管理员..
使用migrate生成'user'表及其所有字段。我注册创建了一个新用户,一切都很完美。然后我复制了'user'表并将其命名为'admin',并将用户名更改为admin。我可以更改密码,或截断密码,注册新的管理员用户,然后从后端删除注册。数据库本身的管理表不是问题,因为当我到达错误时,我没有那么远..
我已经设置并在前端(用户)端使用Yii2高级版。当然,你有Yii :: $ app->用户,它在前端工作得很好。我可以登录,它使用'用户'表。前端工作得很好......
现在在后端(管理员)我需要它来使用'admin'表。我知道你指定要在模型中使用的表。我复制了/common/models/User.php并拥有/common/models/Admin.php并更新了该函数以改为使用'admin'表。
我还复制了/vendor/yiisoft/yii2/web/User.php并将其放在/common/models/web/Admin.php中(并将该类的名称从User重命名为Admin)
然后我编辑了/backend/config/main.php以反映Admin(class和identityClass)的更改。
/backend/config/main.php
'components' => [
'admin' => [
'identityClass' => 'common\models\Admin',
'class' => 'common\models\web\Admin',
'enableAutoLogin' => true,
],
],
/common/models/web/Admin.php
class Admin extends Component { ... }
/common/models/Admin.php
class Admin extends ActiveRecord implements IdentityInterface {
public static function tableName()
{
return '{{%admin}}';
}
}
错误: User::identityClass must be set.
< - 正如您所看到的,它仍然引用了用户模型的某些方式......
另外,当我得到这个设置时,我会使用Yii :: $ app-> admin而不是Yii :: $ app->用户?喜欢检查他们是否使用isGuest登录。
我想确保用户无法登录前端,然后手动转到后端并登录!
答案 0 :(得分:3)
我已经解决了这个问题:)
您必须编辑每个(前端和后端)的主配置并为用户组件指定'identityClass',并将“session”和“request”添加到列表中。
前端配置示例:
'components' => [
'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => true,
'identityCookie' => [
'name' => '_frontendUser', // unique for frontend
]
],
'session' => [
'name' => 'PHPFRONTSESSID',
'savePath' => sys_get_temp_dir(),
],
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => '[RANDOM KEY HERE]',
'csrfParam' => '_frontendCSRF',
],
],
后端配置示例:
'components' => [
'user' => [
'identityClass' => 'common\models\Admin',
'enableAutoLogin' => true,
'identityCookie' => [
'name' => '_backendUser', // unique for backend
]
],
'session' => [
'name' => 'PHPBACKSESSID',
'savePath' => sys_get_temp_dir(),
],
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => '[DIFFERENT UNIQUE KEY]',
'csrfParam' => '_backendCSRF',
],
],
有关更详细的指南,您可以阅读我创建的维基。
维基:[Guide] How to actually separate Frontend and Backend on Yii2 Advanced