不同前缀的认证相互干扰

Auth from different prefix interfering each other

我有两个前缀,我在每个前缀的 AppController 中单独设置了 AuthComponent,每个前缀的 Auth logic 完全不同.

每个前缀都有一个特定的 AppController,每个前缀的所有 controllers extends 它们所属的前缀的特定 AppController

这是问题所在... 当我登录前缀 A 时覆盖前缀 BAuth session data 所以,如果我在前缀 A 上注销 我也在前缀 B 上注销,正如我所说的,前缀完全不同,不应该更改覆盖当时的 session data

我需要的是,当我登录其中一个前缀时,它会在不同的 namespace 或彼此调用的任何地方创建会话数据。

AppController

<?php

namespace App\Controller;

use Cake\Controller\Controller;

class AppController extends Controller
{

    public function initialize()
    {
        parent::initialize();
    }


}

来自仪表板前缀的 AppController

<?php

namespace App\Controller\Dashboard;

use App\Controller\AppController as ParentAppController;


class AppController extends ParentAppController
{
    public function initialize()
    {
        parent::initialize();

        $this->loadComponent('Auth', [
            'authenticate' => [
                'Form' => [
                    'finder' => 'authDashboard',
                    'userModel' => 'DashboardUsers',
                ]
            ],
            'storage' => 'Session'
        ]);
    }

}

Admin 前缀的 AppController

<?php

namespace App\Controller\Admin;

use App\Controller\AppController as ParentAppController;


class AppController extends ParentAppController
{
    public function initialize()
    {
        parent::initialize();

        $this->loadComponent('Auth', [
            'authenticate' => [
                'Form' => [
                    'finder' => 'authAdmin',
                    'userModel' => 'Users',
                ]
            ],
            'storage' => 'Session'
        ]);
    }

}

如上所述,这两个登录的信息将存储在会话的同一区域,因此一个将覆盖另一个。您可以将存储配置为使用不同的密钥:

'storage' => ['className' => 'Session', 'key' => 'Auth.Dashboard']

'storage' => ['className' => 'Session', 'key' => 'Auth.Admin']

详情见https://book.cakephp.org/3.0/en/controllers/components/authentication.html#configuration-options