不同前缀的认证相互干扰
Auth from different prefix interfering each other
我有两个前缀,我在每个前缀的 AppController
中单独设置了 AuthComponent
,每个前缀的 Auth logic
完全不同.
每个前缀都有一个特定的 AppController
,每个前缀的所有 controllers
extends
它们所属的前缀的特定 AppController
。
这是问题所在... 当我登录前缀 A
时覆盖前缀 B
的 Auth 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。
我有两个前缀,我在每个前缀的 AppController
中单独设置了 AuthComponent
,每个前缀的 Auth logic
完全不同.
每个前缀都有一个特定的 AppController
,每个前缀的所有 controllers
extends
它们所属的前缀的特定 AppController
。
这是问题所在... 当我登录前缀 A
时覆盖前缀 B
的 Auth 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。