(進行中: 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 つの特定のタスクに焦点を当てています。次の機能はいずれも含まれていません。
その認証ライブラリには上記のパーツのいずれかが必要であると思われる場合、これはあなたが探しているライブラリではありません。