CakePHP 3.x - 在会话创建之前修改 Auth 组件中的用户数据

CakePHP 3.x - Modify user data in Auth component before session creation

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

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


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

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

(这仍然适用于 CakePHP 3,但也将提供关于如何在新的 CakePHP 4 身份验证插件中完成此操作的简短评论。)

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

我仍然不太确定您究竟需要以何种方式重新组织,但通常您可以使用 mappers/reducers 和结果格式化程序修改查询数据,后者通常是更简单的方法.

这是一个简单的示例,如果设置了名为 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;
    });
});

这样的查找器查询也适用于新的身份验证插件。

另见