CakePHP 3.5 Auth 使用多个表

标签 cakephp cakephp-3.0

我有一个身份验证流程,可以与一个 userModel 配合使用。但不仅仅是因为我的数据库架构,我需要一个适用于多个模型的登录方法/操作

到目前为止,我已经尝试了我能想到的或在网上找到的一切 - 例如编辑 this Cake 1.3 solution进入 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(),
]);

我的扩展验证组件:

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:情况描述

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

EDIT2:选择的解决方案

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

最佳答案

正如马克在评论中所说:不要使用两个用户表。如果与 admin_profiles 和 user_profiles 等不同,请在单独的表中添加类型字段或角色或其他任何内容和关联数据。

不要扩展 Auth 组件。我不建议再以任何方式使用它,因为它将在即将发布的 3.7/4.0 版本中被弃用。 Use the new official authenticationauthorization而是使用插件。

如果您坚持走这条崎岖的道路并想让您的生活变得更加困难,那么我们就这么做,但是您仍然不应该扩展身份验证组件,而应该编写一个自定义身份验证适配器。这是实现您自定义的 2 表怪异功能的正确位置。 Read this section of the manual关于如何做到这一点。

关于CakePHP 3.5 Auth 使用多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49693483/

相关文章:

cakephp - 缓存文件模型 cakePHP

CakePHP hasOne/belongsTo 模型关系

javascript - select2将相关数据加载到第二个select2中?

cakephp - 为什么 CakePHP 2.2.4 中的 View 缓存在 View 缓存后会导致空白页?

php - CakePHP 3 Ldap 身份验证问题和说明

wordpress - 在 cakephp 3.0 中重写 cakephp 路径

Cakephp-3.0 可以立即重定向吗?

php - Cakephp 检查记录是否存在

mysql - CakePHP 3.x - 跨多个表保存关联数据

php - CakePHP 3 查找 id 匹配的所有位置或数组未知长度