CakePHP 3.5 Auth使用多个表

Vojtech Salda

我有一个可以与一个userModel一起正常工作的Auth流程。但是,不仅因为我的数据库模式,我还需要一种登录方法/操作,该方法可以与多种模型一起使用

到目前为止,我已经尝试了所有我能想到的东西或在网上找到的所有东西-例如,将Cake 1.3解决方案编辑到Cake 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
    }
}

编辑1:情况说明

我有两个单独的表(管理员,用户)。我只需要一个登录操作,尝试在用户之前使用Admins表。由于应用程序逻辑的原因,我无法使用“ is_admin”标志将它们组合到一张表中。因此,基本上我需要的是代替一组在Auth配置中设置的特定userModel,而需要一组模型。听起来很简单,但我无法实现。

EDIT2:选择解决方案

根据以下答案,我决定更新自己的架构。身份验证用户表只是具有登录凭据和角色的简化表,其他特定于角色的字段则位于单独的表中,用作与其他特定于角色的表的连接。尽管答案并非完全是针对所提出问题的解决方案,但它使我更多地考虑了架构的任何可能更改,并且由于该解决方案而找到了该解决方案,因此将其标记为解决方案。我也感谢所有评论。

Burzum

正如Mark在评论中已经说过的:不要使用两个用户表。如果不同,例如admin_profiles和user_profiles,请在单独的表中添加类型字段或角色或其他任何内容以及关联的数据。

不要扩展Auth组件。我不建议再使用它,因为它将在即将推出的3.7 / 4.0版本中弃用。请使用新的官方身份验证授权插件。

如果您坚持走低谷之路,并想让自己的生活更艰难,那就顺其自然,但是您仍然不应该扩展auth组件,而应该编写一个自定义的身份验证适配器。这是实现您的自定义2表格怪异的正确位置。阅读手册的这一部分,了解如何进行操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章