[英]Separate authentication for front-end user and admin in cakephp 3.x
我们正在从事一个有4个角色的项目。 但是在cakephp 3.x中,Auth组件使用Auth.User索引在会话中保存身份验证用户数据
$this->Auth->setUser($user);
因此,出于某种目的,我们无法从管理面板访问前端用户帐户,因为当我们从管理面板登录到前端用户时,前端登录操作会执行并覆盖会话值。
因此,如果有任何处理方法,请提出建议。
先感谢您。
同样,我了解您不是在使用前缀来管理后端和前端用户,那么您可能是为后端使用了单独的文件夹结构,可以吗?
您是正确的$this->Auth->setUser($user);
始终与Auth.User
索引建立会话。 因此,您需要为后端编写不同的会话索引,您可以按照以下步骤进行操作:
对于后端用户身份验证:**
$this->loadComponent('Auth', [
'authorize' => ['Controller'], // Added this line
'loginRedirect' => [
'controller' => 'Users',
'action' => 'dashboard',
'prefix' => 'admin_panel'
],
'logoutRedirect' => [
'controller' => 'Users',
'action' => 'login',
'prefix' => 'admin_panel'
],
'storage' => [
'className' => 'Session',
'key' => 'Auth.Admin',
]
]);
**
在这里,您可以在“存储”数组键值中传递所需的索引。 我认为它将为您工作。
在此CakePHP插件精选列表中查看“ 身份验证和授权 ”部分。
例如,您可以使用dereuromarks TinyAuth插件来授权用户并配置他们可以看到的内容。
这样,您可以使用相同的身份验证(注意Authentication和Authorization之间的区别 )和相同的 users表,这将防止您提到的Session
冲突。
Auth组件会覆盖前一个会话,因为它始终将会话存储在Auth.users中,因此我们必须为不同的角色更改会话密钥。
如果将URL前缀用于要访问的不同角色,则可以这样做。
AppController.php
public function beforeFilter(Event $event)
{
if($this->request->params['prefix']){
$this->Auth->config('storage', [
'key'=>'Auth.'.$this->request->params['prefix'],
'className'=>'Session'
]);
}
return parent::beforeFilter($event); // TODO: Change the autogenerated stub
}
这将根据需要在Auth中创建不同的角色。 会议将像这样
[
'Auth'=>[
'User'=>['id'=>''],
'Admin'=>['id'=>''],
]
]
经过测试,对我来说很棒。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.