(進行中: 2.0 のドキュメント)
ユーザー識別を処理するためのライブラリ。
このライブラリの目的は、特定の ID 証明に基づいてユーザーのアカウント (正確には、その一意の ID) を特定し、さまざまなタイプの ID を管理することです。これは、識別、登録、検索、回復の 4 つの異なるサービスで構成されます。
次のコマンドを使用して、composer を使用してライブラリをプロジェクトに追加できます。
composer require teresko/ palladiumこのパッケージを使用するには、PHP バージョン 7.0 以降と PDO が必要です。
ID を保存するテーブルを作成する必要もあります。スキーマの例はここから入手できます。現在、このライブラリには MySQL/MariaDB のテーブル定義のみが含まれていますが、このライブラリは PDO ドライバーを備えた任意の RDBMS で使用できます。
palladium 、 Registration 、 Identification 、 Search 、 Recoveryの 4 つのサービスが含まれています。これらのサービスにはそれぞれ、次の 2 つの必須の依存関係があります。
palladium ContractCanPersistIdenityを実装する)PsrLogLoggerInterfaceを実装する)これにより、永続化抽象化レイヤーの一部を変更または置き換える場合に、デフォルトのリポジトリを置き換えるオプションが提供されます。ロガーに関しては、Monolog を使用することが推奨されていますが、互換性のある任意のロギング システムで動作します。
デフォルト リポジトリには、独自の ID タイプまたは組み込み ID タイプのいずれかに使用されるカスタム ID タイプとデータ マッパーを追加するための機能も付属しています。使用法の詳細については、「%TODO%」セクションを参照してください。
Identificationサービスのコンストラクターには、オプションの 3 番目と 4 番目のパラメーターがあります。
Registrationサービスのコンストラクターには、オプションの 3 番目のパラメーターがあります。
上で述べたように、4 つのサービスはすべて、コンストラクターの依存関係としてリポジトリを想定しています。バンドルされたリポジトリをカスタム バージョンに置き換えない場合は、 palladium RepositoryIdentity初期化し、それをサービスに渡す必要があります。
バンドルされたリポジトリ自体には、 palladium ContractCanCreateMapper実装するインスタンスという単一の依存関係があります。このコントラクト (インターフェイス) はpalladium ComponentMapperFactoryによって実装されます。そして、このファクトリには 2 つの依存関係があります。PDO PDOと、 ID が保存されるテーブルの名前です。
<?php
$ factory = new palladium Component MapperFactory ( new PDO (... $ config ), $ tableName );
$ repository = new palladium Repository Identity ( $ factory );他のすべてのコード例で$repository変数が使用されている場合は、このコード サンプルを使用して初期化されていると考えることができます。
Symfony の dependencyInjection コンポーネント (バージョン: 3.4+) のユーザー向けに、サンプル設定ファイル: %TODO% があります。
<?php
$ registration = new palladium Service Registration ( $ repository , $ logger );
$ identity = $ registration -> createStandardIdentity ( ' [email protected] ' , ' password ' );
$ registration -> bindAccountToIdentity ( $ accountId , $ identity );操作が正常に完了すると、 $identity変数には未検証のStandardIdentityのインスタンスが含まれます。検証を完了するには、ID に含まれるトークンを使用する必要があります。この例では、このトークンは$instance->getToken()使用して評価できます。
電子メールがすでに別の ID に使用されている場合、 createStandardIdentity()メソッドはIdentityConflict例外をスローする可能性があります。
createStandardIdentity()メソッドにはオプションの 3 番目のパラメーターがあり、電子メール検証トークンの有効期間を秒単位で定義します。適用すると、前の例は次のようになります。
<?php
$ registration = new palladium Service Registration ( $ repository , $ logger );
$ identity = $ registration -> createStandardIdentity ( ' [email protected] ' , ' password ' , 3600 );
$ registration -> bindAccountToIdentity ( $ accountId , $ identity );これにより、このユーザーの ID が登録されてから 1 時間、検証トークンが使用可能になります。一定の時間が経過すると、 SearchサービスのfindStandardIdentityByToken()使用してこの ID を見つけることができなくなります。
重要:
createStandardIdentity()メソッドは、ユーザーの電子メールやその他の種類の識別子を検証しません。一意性をチェックするだけです。電子メール、電話番号、ニックネーム、その他の識別子の検証は、このライブラリの範囲外です。
<?php
$ search = new palladium Service Search ( $ repository , $ logger );
$ registration = new palladium Service Registration ( $ repository , $ logger );
$ identity = $ search -> findStandardIdentityByToken ( $ token , palladium Entity Identity:: ACTION_VERIFY );
$ registration -> verifyStandardIdentity ( $ identity ); $token値は、一致するEmailIdentity見つけるために使用され、その後検証されます。 ID が見つからない場合、 findStandardIdentityByToken() IdentityNotFound例外をスローします。
<?php
$ search = new palladium Service Search ( $ repository , $ logger );
$ identification = new palladium Service Identification ( $ repository , $ logger );
$ identity = $ search -> findStandardIdentityByIdentifier ( $ identifier );
$ cookie = $ identification -> loginWithPassword ( $ identity , $ password );指定された識別子 (電子メール アドレスなど) と一致する ID が見つからない場合、 findStandardIdentityByIdentifier()メソッドはIdentityNotFound例外をスローします。
パスワードが一致しない場合、 loginWithPassword()メソッドはPasswordMismatch例外をスローします。
<?php
$ identity = $ this -> registration -> createNonceIdentity ( $ accountId );これにより、 NonceIdentityの新しいインスタンスが作成されます。ログインに使用するには、 NonceIdentity::getIdentifier()およびNonceIdentity::getKey()の値が必要になります。識別子は nonce ID を見つけるために使用され、キーは検証に使用されます。
createNonceIdentity()メソッドはオプションの 2 番目のパラメーターで、この使い捨て ID の有効期間を秒単位で定義します。適用すると、前の例は次のようになります。
<?php
$ identity = $ this -> registration -> createNonceIdentity ( $ accountId , 600 );これにより、使い捨て ID は作成後 10 分間使用できるようになります。許可された時間が経過した後、この ID をIdentificationのuseNonceIdentity()メソッドに渡すと、 IdentityExpired例外がスローされます。
<?php
$ identity = $ this -> search -> findNonceIdentityByIdentifier ( $ identifier );
$ cookie = $ this -> identification -> useNonceIdentity ( $ identity , $ key );指定された識別子 (電子メール アドレス、ニックネームなど) と一致する ID が見つからない場合、 findNonceIdentityByIdentifier()メソッドはIdentityNotFound例外をスローします。
パスワードが一致しない場合、 useNonceIdentity()メソッドはKeyMismatch例外をスローします。
<?php
$ search = new palladium Service Search ( $ repository , $ logger );
$ identification = new palladium Service Identification ( $ repository , $ logger );
$ identity = $ search -> findCookieIdentity ( $ accountId , $ series );
$ cookie = $ identification -> loginWithCookie ( $ identity , $ key ); findCookieIdentity()を使用して Cookie が見つからない場合は、標準のIdentityNotFound例外がスローされます。考えられる原因は、Cookie がアクティブでなくなっているか (ユーザーがログアウトしたなど)、Cookie がまったく存在していないことです。
場合によっては、Cookie が古すぎる場合、 loginWithCookie() IdentityExpired例外を生成します。
ただし、 loginWithCookie()メソッドはCompromisedCookie例外を生成することもあります。この例外が表示された場合は、Cookie が盗まれたか、ユーザーが新しい Cookie 値を受け取っていないことを示している可能性があります。
<?php
$ search = new palladium Service Search ( $ repository , $ logger );
$ identification = new palladium Service Identification ( $ repository , $ logger );
$ identity = $ search -> findCookieIdentity ( $ accountId , $ series );
$ identification -> blockIdentity ( $ identity );これは、盗まれるかどうかわからない疑わしい Cookie に対処するための推奨される方法です。これはユーザーをログアウトすることを目的としたものではありません。
<?php
$ search = new palladium Service Search ( $ repository , $ logger );
$ identification = new palladium Service Identification ( $ repository , $ logger );
$ identity = $ search -> findCookieIdentity ( $ accountId , $ series );
$ identification -> logout ( $ identity , $ key );この操作により、Cookie は「破棄」としてマークされます。生成できる例外のリストは、「Cookie を使用したログイン」セクションで説明されているものと一致します。
<?php
$ search = new palladium Service Search ( $ repository , $ logger );
$ recovery = new palladium Service Recovery ( $ repository , $ logger );
$ identity = $ search -> findStandardIdentityByIdentifier ( $ identifier );
$ token = $ recovery -> markForReset ( $ identity );指定された電子メール アドレスと一致する ID が見つからない場合、 findStandardIdentityByIdentifier()メソッドはIdentityNotFound例外をスローします。
markForReset()を呼び出すときは、すでに検証されているStandardIdentityのインスタンスを指定する必要があります (そうしないと、アプリケーションからユーザーの個人情報が漏洩する可能性があります)。そうでない場合、メソッドはIdentityNotVerified例外をスローします。
markForReset()メソッドはオプションの 2 番目のパラメータで、パスワード リセット トークンの有効期間を秒単位で定義します。適用すると、前の例は次のようになります。
<?php
$ search = new palladium Service Search ( $ repository , $ logger );
$ recovery = new palladium Service Recovery ( $ repository , $ logger );
$ identity = $ search -> findStandardIdentityByIdentifier ( $ identifier );
$ token = $ recovery -> markForReset ( $ identity , 7200 );これにより、このユーザーの ID がリセット対象としてマークされてから 2 時間、パスワード リセット トークンが使用可能になります。許可された時間が経過すると、 SearchサービスのfindEmailIdentityByToken()を使用してこの ID を見つけることができなくなります。
<?php
$ search = new palladium Service Search ( $ repository , $ logger );
$ recovery = new palladium Service Recovery ( $ repository , $ logger );
$ identity = $ search -> findEmailIdentityByToken ( $ token , palladium Entity Identity:: ACTION_RESET );
$ recovery -> resetIdentityPassword ( $ identity , ' foobar ' );指定されたトークンと一致する ID が見つからない場合、 findEmailIdentityByToken()メソッドはIdentityNotFound例外をスローします。
<?php
$ search = new palladium Service Search ( $ repository , $ logger );
$ identification = new palladium Service Identification ( $ repository , $ logger );
$ identity = $ search -> findStandardIdentityByIdentifier ( $ identifier );
$ identification -> changePassword ( $ identity , $ oldPassword , $ newPassword );指定された電子メール アドレス (またはその他のタイプの識別子) と一致する ID が見つからない場合、 findStandardIdentityByIdentifier()メソッドはIdentityNotFound例外をスローします。
パスワードが一致しない場合、 changePassword()メソッドはPasswordMismatch例外をスローします。
<?php
$ search = new palladium Service Search ( $ repository , $ logger );
$ identification = new palladium Service Identification ( $ factory , $ logger );
$ list = $ search -> findIdentitiesByParentId ( $ identity -> getId ());
$ identification -> discardIdentityCollection ( $ list ); findIdentitiesByParentId()の戻り値はIdentityCollectionを返しますが、空にすることもできます。
前述したように、このライブラリのサービスは依存関係として PSR-3 互換ロガーを想定しています。これは、次の 3 つのレベルのイベントをログに記録するために使用されます。
LogLevel::INFOこのログレベルは、アプリケーションを意図した方法で使用するときにユーザーが実行する通常の操作を追跡するために使用されます。
LogLevel::NOTICEユーザーが失敗した操作を試行した場合、このレベルのログが記録されますが、これは正しい使用シナリオでは起こらないはずです。
LogLevel::WARNINGユーザーが侵害された Cookie を使用しようとした場合のログ記録にのみ使用されます。
このライブラリは、1 つの特定のタスクに焦点を当てています。次の機能はいずれも含まれていません。
その認証ライブラリには上記のパーツのいずれかが必要であると思われる場合、これはあなたが探しているライブラリではありません。