编程语言
首页 > 编程语言> > php – 如何使用多个Auth组件?

php – 如何使用多个Auth组件?

作者:互联网

我使用用户模型将Auth组件配置为“管理页面”.但现在,我还想为客户创建/配置Auth.我尝试“重写”inialize()

//This is in my ClientsController.php
public function initialize()
{
    $this->loadComponent('RequestHandler');
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
        'authenticate' => [
            'Form' => [
                'userModel' => 'clients',
                'fields' => ['username' => 'client_email', 'password' => 'client_password']
            ]
        ],
        'loginRedirect' => [
            'controller' => 'Clients',
            'action' => 'index'
        ],
        'logoutRedirect' => [
            'controller' => 'Clients',
            'action' => 'login'
        ],
    ]);
}

有了这个,我收到这个日志(如果使用parent :: initalize()收到相同的)

[RuntimeException] The "Auth" alias has already been loaded with the following config: array (...

我不想手工制作“Auth”.如何使用更多的Auth?

谢谢….

解决方法:

重新配置

您不一定需要使用多个auth组件实例,您可以使用组件config()方法在扩展控制器中重新配置它,类似于以下内容:

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

    // ...

    $this->Auth->config(
        [
            'authenticate' => [
                'Form' => [
                    'userModel' => 'clients',
                    'fields' => [
                        'username' => 'client_email',
                        'password' => 'client_password'
                    ]
                ]
            ],
            'loginRedirect' => [
                'controller' => 'Clients',
                'action' => 'index'
            ],
            'logoutRedirect' => [
                'controller' => 'Clients',
                'action' => 'login'
            ],
            'storage' => [
                'className' => 'Session',
                'key' => 'Auth.Client'
            ]
        ],
        null,
        false
    );
}

注意使用存储选项,你应该在这里定义一个不同的密钥(默认是Auth.User),否则一个经过身份验证的客户端可能能够访问管理区域,反之亦然,因为用户数据将存储在同一个会话密钥!

使用别名

如果需要,您可以使用多个身份验证组件,这样做您必须使用别名,以便组件不会尝试互相覆盖:

$this->loadComponent('ClientAuth', [
    'className' => 'Auth',
    // ....
]);

在这种情况下,不要忘记使用不同的会话密钥!

您可以相应地访问该组件实例$this-> ClientAuth,并且您可能必须允许通过$this-> Auth访问login()方法,即.在ClientsController :: initialize()或beforeFilter()中:

$this->Auth->allow('login');

可能还有其他副作用,所以要小心.

也可以看看

> Cookbook > Controllers > Components > Authentication > Configuration options
> Cookbook > Controllers > Components > Aliasing Components

标签:php,authentication,cakephp,cakephp-3-0
来源: https://codeday.me/bug/20191002/1844118.html