Fury
Fury

Reputation: 4776

Cakephp 3.7.x How to retrieve user data? using Authentication component

I am using cakephp 3.7.2 with Authentication component

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

prints:

object(Authentication\Identity) {

'config' => [
    'fieldMap' => [
        'id' => 'id'
    ]
],
'data' => object(App\Model\Entity\User) {

    'id' => (int) 1,
    'email' => '[email protected]',
    ...
 }
}

I have tried $user->data but it doesn't work.

How to print user data?

Authentication Component

Upvotes: 0

Views: 1128

Answers (3)

Dirk
Dirk

Reputation: 115

I´m using AuthComponent in CakePHP 4.xxx.

I can get User data i.e. in a view with

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

I found the Information on: http://gotchahosting.com/blog/category/cakephp/4002624

Maybe it helps someone who is looking for information about this in CakePHP4

Upvotes: 0

Fury
Fury

Reputation: 4776

So I have figured it out.

In User Entity class

Add use Authentication\IdentityInterface;

and then implement the IdentityInterface.

class User extends Entity implements IdentityInterface
{

blablabla...
yale yale yale ...

Now you can print:

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

Upvotes: 1

Sehdev
Sehdev

Reputation: 5662

As per Authentication component documentation

The identity object is returned by the service and made available in the request. The object provides a method getIdentifier() that can be called to get the id of the current log in identity.

You can use this accordingly as below to get the user data:

 // Service
   $identity =  $authenticationService
        ->getIdentity()
        ->getIdentifier()

    // Component
    $identity = $this->Authentication
        ->getIdentity()
        ->getIdentifier();

    // Request
   $identity = $this->request
        ->getAttribute('identity')
        ->getIdentifier();

The identity object provides ArrayAccess but as well a get() method to access data. It is strongly recommended to use the get() method over array access because the get method is aware of the field mapping.

For eg. to access email and username from the identity you can use the below code.

 $identity->get('email'); // to access email 
    $identity->get('username'); // to access username

Reference link: Authentication -> Docs -> Identity Object

Hope this will help.

Upvotes: 0

Related Questions