Identityオブジェクト

Identityオブジェクトは認証サービスによって返され、リクエストで使用できるようになります。アイデンティティは、現在のログインidentityのプライマリID値を取得するために呼び出すことができるメソッドgetIdentifier()を提供します。

Identity objects are returned by the authentication service and made available in the request. Identities provides a method getIdentifier() that can be called to get the primary id value of the current log in identity.

このオブジェクトが存在する理由は、それを実装/ソースにするインターフェースを提供するためです:

The reason this object exists is to provide an interface that makes it implementations/sources:
// Service
$authenticationService
    ->getIdentity()
    ->getIdentifier()

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

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

IDオブジェクトはArrayAccessを提供しますが、データにアクセスするためのget()メソッドも提供します。getメソッドはフィールドマッピングを認識するため、配列アクセスではなくget()メソッドを使用することを強くお勧めします:

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');

get()メソッドは、IDEメタファイル 例:IdeHelperを通じて。

The get() method can also be type-hinted via IDE meta file, e.g. through IdeHelper.

ただし、必要に応じて、プロパティアクセスを使用できます:

If you want, you can use property access, however:
$identity->email;
$identity->username;

デフォルトのIdentityオブジェクトクラスは、フィールドをマップするように構成できます。これは、アイデンティティの識別子が従来とは異なるIDフィールドである場合、または他のフィールドをより一般的で一般的な名前にマップする場合に非常に役立ちます:

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'
    ]
]);

独自のアイデンティティーオブジェクトを作成する

デフォルトでは、認証プラグインは、返されたユーザーデータを、メソッドとプロパティアクセスをプロキシするIdentityDecoratorでラップします。独自のIDオブジェクトを作成する場合は、オブジェクトにIdentityInterfaceを実装する必要があります。

By default the Authentication plugin will wrap your returned user data in an IdentityDecorator that proxies methods and property access. If you want to create your own identity object, your object must implement the IdentityInterface.

ユーザークラスにIdentityインターフェイスを実装する

このプラグインで既存のUserクラスを引き続き使用する場合は、Authentication\IdentityInterfaceを実装できます:

If you’d like to continue using your existing User class with this plugin you can implement the Authentication\IdentityInterface:
namespace App\Model\Entity;

use Authentication\IdentityInterface;
use Cake\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
}

カスタムIdentityデコレーターの使用

識別子の結果オブジェクトを変更してIdentityInterfaceを実装できない場合は、必要なインターフェイスを実装するカスタムデコレータを実装できます:

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'
    ]
]);