首页 > 解决方案 > 如何在 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();从两个登录功能调用。所以也许这就是问题所在。是否可以为不同的身份验证使用不同的表。

标签: cakephp

解决方案


如果我理解,您可以finder在 Auth 配置中使用方法(https://book.cakephp.org/3.0/en/controllers/components/authentication.html#customizing-find-query

内部查找器方法您可以使用默认模型或加载其他模型。


推荐阅读