我使用用户模型将身份验证组件配置为"管理页面"。但是现在,我还想为客户端创建/配置身份验证。我尝试"重写"inialize()
//This is in my ClientsController.php
public function initialize()
{
$this->loadComponent('RequestHandler');
$this->loadComponent('Flash');
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'userModel' => 'clients',
'fields' => ['username' => 'client_email', 'password' => 'client_password']
]
],
'loginRedirect' => [
'controller' => 'Clients',
'action' => 'index'
],
'logoutRedirect' => [
'controller' => 'Clients',
'action' => 'login'
],
]);
}
有了这个,我收到这个日志(如果使用父::initalize()接收相同的)
[RuntimeException] The "Auth" alias has already been loaded with the following config: array (...
我不想创建"身份验证"手册。如何使用多个身份验证?
谢谢。。。。
重新配置
您不一定需要使用多个身份验证组件实例,您只需使用组件config()
方法在扩展控制器中重新配置它,类似于:
public function initialize()
{
parent::initialize();
// ...
$this->Auth->config(
[
'authenticate' => [
'Form' => [
'userModel' => 'clients',
'fields' => [
'username' => 'client_email',
'password' => 'client_password'
]
]
],
'loginRedirect' => [
'controller' => 'Clients',
'action' => 'index'
],
'logoutRedirect' => [
'controller' => 'Clients',
'action' => 'login'
],
'storage' => [
'className' => 'Session',
'key' => 'Auth.Client'
]
],
null,
false
);
}
请注意使用 storage
选项,您应该在此处定义不同的密钥(默认值为 Auth.User
),否则经过身份验证的客户端可能能够访问管理区域,反之亦然,因为用户数据将存储在同一个会话密钥中!
使用别名
如果需要,您可以使用多个身份验证组件,为此,您必须使用别名,以便这些组件不会尝试相互覆盖:
$this->loadComponent('ClientAuth', [
'className' => 'Auth',
// ....
]);
在这种情况下,不要忘记使用不同的会话密钥!
您将相应地$this->ClientAuth
访问该组件实例,并且您可能必须允许通过 $this->Auth
访问 login()
方法,即在ClientsController::initialize()
或beforeFilter()
执行以下操作:
$this->Auth->allow('login');
可能会有进一步的副作用,所以要小心。
参见
- 说明书> 控制器>组件> 身份验证> 配置选项
- 说明书> 控制器>组件>别名组件