在cakephp 3.x中为前端用户和管理员分别进行身份验证

时间:2017-05-03 13:42:51

标签: php mysql authentication cakephp cakephp-3.x

我们正在开展一个有4个角色的项目。但是在cakephp 3.x中,Auth组件使用

Auth.User 索引来验证会话中的用户数据。

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

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

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

提前谢谢。

3 个答案:

答案 0 :(得分:2)

我也明白你没有使用前缀来管理后端和前端用户,那么你可能会使用单独的文件夹结构来管理后端,我可以吗?

你是对的,$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',              
                ]
            ]);

**

在这里,您可以在'storage'数组键值中传递所需的索引。 我认为这对你有用。

答案 1 :(得分:0)

查看此CakePHP插件策划列表中的Authentication and Authorization部分。

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

通过这种方式,您可以使用相同的身份验证(了解differences between Authentication and Authorization)和相同的用户表,这将阻止{{1}你提到的冲突。

答案 2 :(得分:0)

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'=>''],
    ]
]

经过测试,对我很有帮助。