使用CakePHP 3中的AuthComponent,您可以使用$this->Auth->user()
访问Controller中当前登录的用户。但是,此方法仅返回数组,而不返回用户实体。
在很多地方,我必须使用登录用户的用户实体,但是必须在从AuthComponent获取id后手动查询UsersTable,这看起来很傻,因为AuthComponent无论如何都会获取一个带有水合的用户实体并将其展平为一个数组。因此,用户实体被提取两次。
有没有办法从AuthComponent而不是数组中获取水合用户实体?
$authUser = $this->Auth->user('id');
if($authUser !== null) {
$authUser = $users->get($authUser);
}
答案 0 :(得分:1)
实体未存储在会话中的主要原因是因为无法保证auth数据是实际的数据库用户。例如,您可能正在验证来自外部系统的某些凭据,例如远程服务器中的单点登录。
另一个原因是用户信息可能会从请求变为请求,并且对每个请求执行数据库查找都不太理想。
最后,人们可以认为通过更改会话实体中的数据,他们将修改用户(或修改表中的数据将刷新会话)。
我建议您在需要实体时使用new User($data)
将数组数据转换为实体。