CakePHP 4 -如何使用新的身份验证组件获取当前登录用户的ID?

lvmkulzt  于 2022-11-11  发布在  PHP
关注(0)|答案(2)|浏览(148)

在CakePHP 4.x之前的版本中,它有一个简单的Auth组件,用于设置身份验证/授权,并使其非常容易地完成诸如用一行代码获得登录用户ID之类的事情。
在4.x中,Auth组件已被删除,并拆分为单独的AuthenticationAuthorization组件。
似乎缺少关于如何使用这两个新组件的信息(文档非常稀疏,GitHub上的README几乎没有提供使用信息)。
到目前为止,我所做的是:
按照CMS Tutorial设置一个CakePHP 4.3.7应用程序,同时使用身份验证和授权。
我在一个Controller方法中添加了以下代码。我之所以能够找到这些代码是因为有人在Cakephp - get user id in controller when using Auth上发布了一个更新的答案--实际上似乎没有任何地方记录到这些代码:

$identity = $this->request->getAttribute('authentication')->getIdentity();
debug($identity);

这给出:

object(Authentication\Identity) id:0 {
    'config' => [ ]
    'data' => object(App\Model\Entity\User) id:1 {
        'id' => (int) 7
        'first_name' => 'Andy'
        'last_name' => 'My Last Name'
        'email' => 'andy@example.com'

如果我执行debug($identity->data->id);,我希望能够读取该对象的id属性,并让它返回我的用户ID,在本例中为7,它给出null
我不禁认为这是一种错误的方法,应该有一种简单的方法来返回登录的用户ID,因为在任何用例中几乎都需要这样做。
请有人指出这是在文件中的位置,或者建议如何实现?

92vpleto

92vpleto1#

我找到了一个答案,我张贴,因为它的工作,虽然我不是100%肯定,如果这是正确的方式。
如果你有其他的方法,请张贴一个答案。
我在原始问题中发布的堆栈溢出link具有误导性;"这不符合我的需要“
我发现https://discourse.cakephp.org/t/display-the-data-of-a-logged-in-user/8160建议您可以用途:

$user = $this->request->getAttribute('identity');

然后,您可以读取这个的属性,例如。

$user->id; // In my example this returns (int)7

您还可以读取users数据库表中用户的任何其他属性,例如

echo $user->first_name;
// "Andy"
t1qtbnec

t1qtbnec2#

您可以使用身份验证组件获取经过身份验证的用户标识数据:

$user = $this->Authentication->getIdentity();

您也可以直接从请求示例获取标识:

$user = $request->getAttribute('identity');

文件上写着:https://book.cakephp.org/authentication/2/en/authentication-component.html#accessing-the-logged-in-user

相关问题