cakephp - 如何在 cakePHP 中使用两个不同的表进行身份验证
问题描述
我正在使用 cakePHP 创建管理员和 api。admin 和 api 端都有登录系统。有两张表,一张是admins
用于管理员登录的。另一个是users
用于 api 端登录。所以我想要的是,如果用户来自管理端,那么它应该从admins
表中检查,如果用户来自 api,它应该从users
表中检查。我在两个不同的文件夹中分离admin
和功能。api
所以我正在处理controller
文件夹的正常管理功能。对于api
功能,我在文件夹内创建了另一个文件controller
夹,名为Api
. 所以AppController.php
我正在使用两个。一个用于admin
,另一个用于 api。
这是我Controller\AppController.php
为管理员调用 auth 的方式
$this->loadComponent('Auth',[
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'email',
'password' => 'password'
]
]
],
'loginAction' => [
'controller' => 'admins',
'action' => 'login'
]
]);
这就是我为 api 登录调用 auth 组件的方式Controller\App\AppController.php
$this->loadComponent('Auth',[
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'email',
'password' => 'password'
]
]
],
'loginAction' => [
'controller' => 'user',
'action' => 'login'
]
]);
这是管理员的登录功能
public function login()
{
$user = $this->request->getSession()->read('Auth.User');
if($user){
$this->redirect(array('controller' => 'Venues'));
}
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if($user){
$this->Auth->setUser($user);
}
else{
$this->Flash->error('Incorrect Login credential');
}
}
}
这是api的登录功能
public function login()
{
$user = $this->request->getSession()->read('Auth.User');
if($user){
$this->redirect(array('controller' => 'Venues'));
}
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if($user){
$this->Auth->setUser($user);
}
else{
$this->Flash->error('Incorrect Login credential');
}
}
}
我$this->Auth->identify();
从两个登录功能调用。所以也许这就是问题所在。是否可以为不同的身份验证使用不同的表。
解决方案
如果我理解,您可以finder
在 Auth 配置中使用方法(https://book.cakephp.org/3.0/en/controllers/components/authentication.html#customizing-find-query)
内部查找器方法您可以使用默认模型或加载其他模型。