✅ Location validators
Location ミューテーションルートは2つの共有認証バリケーターファクトリーを順にcomposeします;公開の読み取りリストルートはどちらもcomposeしません。それらの完全な呼び出しは各保護されたLocation ルートソースにあります。
インベントリ
| バリケーター | 読む値 | 成功条件 | 失敗/エラー | 消費者 |
|---|---|---|---|---|
isAuthenticated() | context.authenticate (デフォルト getBearerTokenInfo) | 選択されたアダプターがアクセストークンを解決する。 | Location サービスアダプターは 401 で失敗します;カスタムアダプターは独自のエラーをスローする可能性があります。 | createLocationRoute、updateLocationRoute、deleteLocationRoute |
checkIdentityType(['admin']) | context.authenticate、context.db.identities、context.configuration?.identity?.typeIds | 有効なユーザーアクセストークンのアイデンティティ typeId が設定された admin と一致する。 | 500 セットアップ、401 トークン、403 アイデンティティ/タイプ/アクセス。 | createLocationRoute、updateLocationRoute、deleteLocationRoute |
詳細
isAuthenticated()
実装
シグネチャ: isAuthenticated(): Validator。ファクトリーは createLocationRoute、updateLocationRoute、および deleteLocationRoute によって最初に呼び出されます。返されたバリケーターは payload.context.authenticate を読み、デフォルトで getBearerTokenInfo にフォールバックし、完全なペイロードでそれを呼び出します。直接データベースまたはアイデンティティタイプのチェックはありません;標準の共有バリケーター契約を参照してください。
locationService は authMode が省略されているか 'bearer' の場合 getBearerTokenInfo を提供し、'cookie' の場合のみ getCookieTokenInfo を提供します。Bearer アダプターはリクエストの Authorization ヘッダーを読み取ります;cookie モードは request.cookies.accessToken を読み取り、ホストミドルウェアが cookies を埋めることを要求します。両方のアダプターは設定された認証シークレットに対してアクセストークンを検証し、ユーザーアクセストークンの場合はリクエストホスト、フィンガープリント、IP、およびユーザーエージェントをセキュリティチェックに使用します(IP チェックはデフォルトでランタイム設定が checkIp を設定しない場合有効になります)。無効なトークンパスは 401 をスローします;カスタムの context.authenticate 実装はその独自のエラーを表示する可能性があります。公開の getLocationRoute および findLocationsRoute はこのファクトリーをcomposeしません。
消費者: createLocationRoute、updateLocationRoute、および deleteLocationRoute。
checkIdentityType(['admin'])
実装
シグネチャ: checkIdentityType(['admin']): Validator。標準の checkIdentityType のファクトリー呼び出しで、createLocationRoute、updateLocationRoute、および deleteLocationRoute で2番目に呼び出されます。返されたバリケーターはまず payload.context.db.identities を読み取ります;欠落している場合、NodeblocksError(500, 'db.identities is not set') をスローします。次に payload.context.configuration?.identity?.typeIds を読み取ります;欠落している場合、NodeblocksError(500, 'configuration.identity.typeIds is not set') をスローします。これらのセットアップチェックはトークン認証の前に発生します。
セットアップ後、isAuthenticated() がすでに実行したにもかかわらず、トークンを2回目に再度呼び出します。トークンは isValidUserAccessToken を満たす必要があります;最初のバリケーターを通過したアプリアクセストークンはここで 401 Invalid token で拒否されます。getIdentityById を使用してトークンの identityId を db.identities から読み取り、次に設定された ['admin'] 許可リストに対してアイデンティティの typeId を configuration.identity.typeIds.admin と比較します。アイデンティティルックアップエラーは 403 Failed to fetch identity になり、欠落した typeId は 403 Invalid identity type ID になり、管理者でないタイプは 403 Identity is not authorized to access this resource になります。公開の getLocationRoute および findLocationsRoute はこのファクトリーをcomposeしません。
消費者: createLocationRoute、updateLocationRoute、および deleteLocationRoute。