CakePHP 3-登录错误-调用布尔值上的成员函数标识

CakePHP 3-登录错误-调用布尔值上的成员函数标识,cakephp,login,cakephp-3.0,identify,Cakephp,Login,Cakephp 3.0,Identify,您好,我正在使用CakePHP3来简单地设置一个站点,其中一些页面需要用户首先登录 当我将loadComponent('Auth',blablabla)代码放入AppController.php的initialize()中时,一切正常 src\Controller\AdminController.php ... public function login() { if ($this->request->is('post')) { $admin = $this-

您好,我正在使用CakePHP3来简单地设置一个站点,其中一些页面需要用户首先登录

当我将
loadComponent('Auth',blablabla)
代码放入
AppController.php的
initialize()
中时,一切正常

src\Controller\AdminController.php

...
public function login() {
    if ($this->request->is('post')) {
        $admin = $this->Auth->identify();
        if ($admin) {
            $this->Auth->setUser($admin);
            return $this->redirect($this->Auth->redirectUrl());
        }
        $this->Flash->error('Your username or password is incorrect.');
    }
}
...
...
public function initialize() {
    parent::initialize();
    $this->loadComponent('RequestHandler');
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
        'Authenticate' => [
            'Form' => [
                'userModel' => 'Admin',
                'Fields' => [
                    'username' => 'email',
                    'password' => 'password'
                ]
            ]
        ],
        'loginAction' => [
            'controller' => 'Admin',
            'action' => 'login',
        ]
    ]);

    $this->Auth->allow(['display']);
}
...
src\Controller\AppController.php

...
public function login() {
    if ($this->request->is('post')) {
        $admin = $this->Auth->identify();
        if ($admin) {
            $this->Auth->setUser($admin);
            return $this->redirect($this->Auth->redirectUrl());
        }
        $this->Flash->error('Your username or password is incorrect.');
    }
}
...
...
public function initialize() {
    parent::initialize();
    $this->loadComponent('RequestHandler');
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
        'Authenticate' => [
            'Form' => [
                'userModel' => 'Admin',
                'Fields' => [
                    'username' => 'email',
                    'password' => 'password'
                ]
            ]
        ],
        'loginAction' => [
            'controller' => 'Admin',
            'action' => 'login',
        ]
    ]);

    $this->Auth->allow(['display']);
}
...
此时,我需要登录才能查看站点的所有其他页面。 但我试图将相同的身份验证设置放在另一个名为
JustController
的控制器中,在我登录后,出现了一个错误

对布尔函数的成员函数identify()的调用

已经放映了

应该可以在其他控制器中设置身份验证,这样站点就可以有多套登录系统,而不是通过在
AppController
中设置来覆盖整个站点,不是吗


谢谢。

您在AdminController中调用了AppController的初始化吗?@cjquinn谢谢您的回复。您的意思是在AdminController的
initialize()
中吗?在我打电话给它之后,它不会引起任何不同。但是
AppController
initialize()
不是被称为
AdminController
扩展了它吗?有朋友回复很酷,我可以知道你对在CakePHP站点中构建两个登录方案的看法吗?e、 g.论坛用户和面板管理员。你使用前缀吗?是的,如果你没有在
AdminController
中重载
AppController
initialize()
,你就不需要调用它了。我会在您需要两个登录方案时使用角色字段,然后您可以使用
isAuthorized()
来管理不同类型的用户。见@cjquinn谢谢你的意见。我发现我可以在
beforeFilter()
中加载
Auth
组件,而不是
initialize()
,它可以工作。同样在
breforfilter()
中,我可以使用
$this->request->params[“prefix”]
来分隔两个登录方案。Ace,很高兴知道!