从AuthComponent :: user()

时间:2015-07-22 08:54:09

标签: cakephp authentication cakephp-3.0

使用CakePHP 3中的AuthComponent,您可以使用$this->Auth->user()访问Controller中当前登录的用户。但是,此方法仅返回数组,而不返回用户实体。

在很多地方,我必须使用登录用户的用户实体,但是必须在从AuthComponent获取id后手动查询UsersTable,这看起来很傻,因为AuthComponent无论如何都会获取一个带有水合的用户实体并将其展平为一个数组。因此,用户实体被提取两次。

有没有办法从AuthComponent而不是数组中获取水合用户实体?

$authUser = $this->Auth->user('id');
if($authUser !== null) {
    $authUser = $users->get($authUser);
}

1 个答案:

答案 0 :(得分:1)

实体未存储在会话中的主要原因是因为无法保证auth数据是实际的数据库用户。例如,您可能正在验证来自外部系统的某些凭据,例如远程服务器中的单点登录。

另一个原因是用户信息可能会从请求变为请求,并且对每个请求执行数据库查找都不太理想。

最后,人们可以认为通过更改会话实体中的数据,他们将修改用户(或修改表中的数据将刷新会话)。

我建议您在需要实体时使用new User($data)将数组数据转换为实体。