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;
});
});
这样的查找器查询也适用于新的身份验证插件。
另见
在 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;
});
});
这样的查找器查询也适用于新的身份验证插件。
另见