繁体   English   中英

在cakephp 3.x中对前端用户和管理员的单独身份验证

[英]Separate authentication for front-end user and admin in cakephp 3.x

我们正在从事一个有4个角色的项目。 但是在cakephp 3.x中,Auth组件使用Auth.User索引在会话中保存身份验证用户数据

$this->Auth->setUser($user);

因此,出于某种目的,我们无法从管理面板访问前端用户帐户,因为当我们从管理面板登录到前端用户时,前端登录操作会执行并覆盖会话值。

因此,如果有任何处理方法,请提出建议。

先感谢您。

同样,我了解您不是在使用前缀来管理后端和前端用户,那么您可能是为后端使用了单独的文件夹结构,可以吗?

您是正确的$this->Auth->setUser($user); 始终与Auth.User索引建立会话。 因此,您需要为后端编写不同的会话索引,您可以按照以下步骤进行操作:

对于后端用户身份验证:**

$this->loadComponent('Auth', [
                'authorize' => ['Controller'], // Added this line
                'loginRedirect' => [
                    'controller' => 'Users',
                    'action' => 'dashboard',
                    'prefix' => 'admin_panel'
                ],
                'logoutRedirect' => [
                    'controller' => 'Users',
                    'action' => 'login',
                    'prefix' => 'admin_panel'
                ],
                'storage' => [
                    'className' => 'Session',
                    'key' => 'Auth.Admin',              
                ]
            ]);

**

在这里,您可以在“存储”数组键值中传递所需的索引。 我认为它将为您工作。

在此CakePHP插件精选列表中查看“ 身份验证和授权 ”部分。

例如,您可以使用dereuromarks TinyAuth插件来授权用户并配置他们可以看到的内容。

这样,您可以使用相同的身份验证(注意Authentication和Authorization之间区别 )和相同的 users表,这将防止您提到的Session冲突。

Auth组件会覆盖前一个会话,因为它始终将会话存储在Auth.users中,因此我们必须为不同的角色更改会话密钥。

如果将URL前缀用于要访问的不同角色,则可以这样做。

AppController.php

    public function beforeFilter(Event $event)
    {
        if($this->request->params['prefix']){
            $this->Auth->config('storage',  [
                'key'=>'Auth.'.$this->request->params['prefix'],
                'className'=>'Session'
            ]);
        }

        return parent::beforeFilter($event); // TODO: Change the autogenerated stub
    }

这将根据需要在Auth中创建不同的角色。 会议将像这样

[
    'Auth'=>[
        'User'=>['id'=>''],
        'Admin'=>['id'=>''],
    ]
]

经过测试,对我来说很棒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM