【问题标题】:Separate authentication for front-end user and admin in cakephp 3.xcakephp 3.x 中前端用户和管理员的单独认证
【发布时间】:2017-05-03 13:42:51
【问题描述】:

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

来保存会话中的身份验证用户数据

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

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

因此,如果有任何处理此问题的流程,请向我们提出建议。

提前谢谢你。

【问题讨论】:

  • @AmanRawat 提供的链接答案将只允许操作,这不适用于我的问题
  • @AmanRawat 我的问题与此完全不同
  • 所以你想同时登录两个不同角色的用户?
  • @AmanRawat 是的,你是对的,并且也在同一个浏览器上

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


【解决方案1】:

我也了解到您没有使用前缀来管理后端和前端用户,那么您可能会为后端使用单独的文件夹结构,对吗?

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

**

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

【讨论】:

  • 谢谢@Krishna Gupta,它对我有用。你的回答完全满足了我的要求。做得好,再次非常感谢你。
【解决方案2】:

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

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

这样您可以使用 same 身份验证(注意differences between Authentication and Authorization)和 same 用户表,这将防止您提到的Session 冲突.

【讨论】:

    【解决方案3】:

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

    经过测试,对我来说效果很好。

    【讨论】:

    • 我们没有为管理面板使用前缀
    猜你喜欢
    • 2013-08-23
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多