【问题标题】:CakePHP 3.x - Modify user data in Auth component before session creationCakePHP 3.x - 在会话创建之前修改 Auth 组件中的用户数据
【发布时间】:2020-04-09 08:01:18
【问题描述】:

在 CakePHP 3 中使用 Auth 组件时,您可以定义 findAuth() 查找器(或配置不同的查找器)来控制加载的数据:

// AppController
$this->loadComponent('Auth', [
    //...
    'authenticate' => [
        'Form' => [
            'finder' => 'auth'
        ]
    ],
    //...
]);


// UsersTable
public function findAuth($query, array $options)
{
    return $query
        ->...;
}

我需要一些查询生成器无法完成的功能。如何在会话创建之前对加载的身份验证数据进行后处理?
请注意,我有不同的用户登录方式,因此我希望将其保留在 AuthComponent 逻辑中。

(这仍然适用于 CakePHP 3,但也将简要说明如何在新的 CakePHP 4 身份验证插件中完成此操作。)

编辑:我需要的大致轮廓:需要根据当前上下文在用户数组中重新组织数据,即用户可以选择一个活动项目。

【问题讨论】:

  • 具体需要通过哪种方式修改数据?
  • 已将其添加到问题中。基本上,我需要构造用户数组,以便以后可以轻松获取与用户所选项目相关的信息。
  • "我希望将其保留在 AuthComponent 逻辑中" -> 制作您自己的 AuthComponent

标签: authentication cakephp orm cakephp-3.0


【解决方案1】:

我仍然不确定您究竟需要以什么方式重新组织,但通常您可以使用映射器/缩减器和结果格式化程序修改查询的数据,后者通常是更简单的方法。

下面是一个快速示例,如果设置了名为 active_project_id 的字段,则会在结果中添加一个名为 additional_data 的附加字段:

$query->formatResults(function (\Cake\Collection\CollectionInterface $results) {
    return $results->map(function ($row) {
        if (isset($row['active_project_id'])) {
            $row['additional_data'] = 'lorem ipsum';
        }

        return $row;
    });
});

这样的查找器查询也可以与新的身份验证插件一起使用。

另见

【讨论】:

  • 好电话。我会看看这是否适合并回来。
猜你喜欢
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 2017-05-24
  • 2012-05-21
  • 2016-01-01
  • 1970-01-01
相关资源
最近更新 更多