代码之家  ›  专栏  ›  技术社区  ›  Vojtěch Å alda

CakePHP 3.5 Auth使用多个表

  •  2
  • Vojtěch Å alda  · 技术社区  · 6 年前

    我有一个Auth进程,它可以很好地与一个userModel配合使用。但不仅仅是因为我的DB模式 一种登录方法/操作,可用于多个模型

    到目前为止,我已经尝试了所有我能想到或在网上找到的东西,例如编辑 this Cake 1.3 solution 我找到了蛋糕3和其他一些提示。

    然而,我无法理解。

    谢谢你的回答。

    我的AppController组件加载:

    $this->loadComponent('ExtendedAuth', [
        'authenticate' => [
            'Form' => [
                //'userModel' => 'Admins',
                'fields' => [
                    'username' => 'email',
                    'password' => 'password'
                ]
            ]
        ],
        'loginAction' => [
            'controller' => 'Admins',
            'action' => 'login'
        ],
        // If unauthorized, return them to page they were just on
        'unauthorizedRedirect' => $this->referer(),
    ]);
    

    我的ExtendedAuthComponent:

    class ExtendedAuthComponent extends AuthComponent
    {
    
        function identify($user = null, $conditions = null) {
    
            $models = array('Admins', 'Users');
    
            foreach ($models as $model) {
    
                //$this->userModel = $model; // switch model
                parent::setConfig('authenticate', [
                    AuthComponent::ALL => [
                        'userModel' => $model
                    ]
                ]);
    
                $result = parent::identify(); // let cake do its thing
    
                if ($result) {
                    return $result; // login success
                }
            }
            return null; // login failure
        }
    }
    

    EDIT1:情况描述

    我有两个单独的表(Admins、Users)。我只需要一个登录操作,尝试在用户之前使用Admins表。由于应用程序逻辑的原因,我无法将它们组合到一个具有类似“is\u admin”标志的表中。因此,基本上我需要的不是Auth config中的一个特定用户模型集,而是一组模型。听起来很简单,但我没能做到。

    编辑2:选择的解决方案

    根据下面的答案,我决定更新我的模式。Auth users表只是一个带有登录凭据的简化表,角色和其他特定于角色的字段则位于单独的表中,这些表用作其他特定于角色的表的连接。尽管答案并不完全是所提问题的解决方案,但它让我更多地思考了模式的任何可能更改,我找到了这个解决方案,因此我将其标记为解决方案。我也感谢所有的评论。

    1 回复  |  直到 6 年前
        1
  •  4
  •   floriank    6 年前

    正如马克在评论中所说:不要使用两个用户表。如果类型字段或角色与admin\u profiles和user\u profiles不同,请在单独的表中添加类型字段或角色或其他任何内容以及相关数据。

    不要扩展身份验证组件。我不建议再以任何方式使用它,因为它将在即将发布的3.7/4.0版本中遭到弃用。 Use the new official authentication authorization 而不是插件。

    如果你坚持走崎岖的道路,想让你的生活更艰难,那就去做吧,但是你仍然不应该扩展auth组件,而应该编写一个自定义的身份验证适配器。这正是实现自定义2表古怪的地方。 Read this section of the manual 关于如何做到这一点。