Skip to content

Latest commit

 

History

History
113 lines (89 loc) · 2.95 KB

Identity-Object.md

File metadata and controls

113 lines (89 loc) · 2.95 KB

The Identity Object

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.

The reason this object exists is to provide an interface that makes it easy to get access to the identity's id across various implementations/sources.

It is named "identity" because a login can be made also by another system which is not necessary what is considered an "user". Identity provides a neutral but ubiquitous naming.

// Service implementing \Phauthentic\AuthenticationServiceInterface
$authenticationService
    ->getIdentity()
    ->getIdentifier()

// Instance of a request implementing \Psr\Http\Message\ServerRequestInterface
$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.

$identity->get('email');
$identity->get('username');

The default Identity object class can be configured to map fields. This is pretty useful if the identifier of the identity is a non-conventional id field or if you want to map other fields to more generic and common names.

    $identity = new Identity($data, [
        'fieldMap' => [
            'id' => 'uid',
            'username' => 'first_name'
        ]
    ]);
};

Creating your own Identity Object

If you want to create your own identity object, your object must implement the IdentityInterface.

Implementing the IdentityInterface on your User class

If you'd like to continue using your existing User class with this plugin you can implement the Authentication\IdentityInterface:

namespace App\Model\User;

use Phauthentic\Authentication\IdentityInterface;
use SomeFramework\ORM\Entity;

class User extends Entity implements IdentityInterface
{

    /**
     * Authentication\IdentityInterface method
     */
    public function getIdentifier()
    {
        return $this->id;
    }

    /**
     * Authentication\IdentityInterface method
     */
    public function getOriginalData()
    {
        return $this;
    }

    // Other methods
}

Using a Custom Identity Decorator

If your identifiers cannot have their resulting objects modified to implement the IdentityInterface you can implement a custom decorator that implements the required interface:

// You can use a callable...
$identityResolver = function ($data) {
    return new MyCustomIdentity($data);
};

//...or a class name to set the identity wrapper.
$identityResolver = MyCustomIdentity::class;

// Then pass it to the service configuration
$service = new AuthenticationService([
    'identityClass' => $identityResolver,
    'identifiers' => [
        'Authentication.Password'
    ],
    'authenticators' => [
        'Authentication.Form'
    ]
]);