エラーログを外部サービスに送信する

異常な操作の可視性と診断を向上させるために、エラーイベントログを外部サービスに送信することをお勧めします。サブスクリプションプランで提供されるログ保持期間を超えてログイベントを保持および分析するには、Auth0のログストリーミングを使用してください。DataDogやAWS EventBridgeなどのサービスを利用できます。また、Auth0 Marketplaceのログストリーミングセクションで外部サービスにログを送信する機能も提供しています。

ルールでエラーオブジェクトを使用する

ルールの実行時間には制約があります。詳細については、カスタムデータベースアクションスクリプト実行のベストプラクティスをお読みください。この時間内にエラー状態からの回復が不可能(または可能性が低い)場合は、エラー状態を明示的に返す必要があります。これは、Node のErrorオブジェクトのインスタンスを返すことで、ルールの実行を完了するだけです。例えば: return callback(new Error('some description')); 詳細については、Class: Error on nodejs.orgをお読みください。 あるいは、Auth0固有のUnauthorizedErrorのインスタンスを返すこともできます。これにより、unauthorizedエラー条件が、提供されたエラー説明とともに、認証を開始したアプリケーション(つまり、/authorizeエンドポイントへのリダイレクトが開始されたアプリケーション)に返されます。これにより、アプリケーションは条件付きの再試行機能を提供でき、特定の条件に基づいてアクセスを拒否するルールを実装できます: return callback(new UnauthorizedError('some description'), user, context);

意味のあるエラーコードの説明を使用する

UnauthorizedErrorUnauthorizedErrorオブジェクトは提供された説明のみを返します。未認証エラー条件に対して特定の処理を行うために、説明に簡単にアクセスできるエラーコード情報を含めることをお勧めします。例えば: '[00043] - my specific error description')

例外処理

キャッチされていないJavaScript例外などの予期しないエラー条件は、パイプラインの実行が早期に終了する原因となり、最終的に認証エラーが返されることになります。 非同期操作を含む状況では、catchハンドラを使用する必要があります。Promiseオブジェクト処理を使用する場合。Promiseオブジェクト処理は、非同期操作以外のエラー処理にも効果的です。以下に示すように、Promiseオブジェクトを使用して、例えば同期関数呼び出しをラップすることで、プロミスチェーンなどを使用してカスケードエラー処理を実装しやすくなります。Promiseオブジェクトの詳細については、MDN Web DocsのPromiseをお読みください。プロミスチェーンの詳細については、javascript.infoのPromisesを使用したエラー処理
return new Promise(function(resolve, reject) {
    jwt.verify(
      token,
      secret,{
      clockTolerance: 5},
      function(err, decoded) {
        if (err) {
          reject(err);
        } else {
          resolve(decoded);
      }
    });
  });
あるいは、try...catch処理を使用して、同期操作中に発生するJavaScript例外を処理することができます。詳細については、try...catchのMDN Web Docsを参照してください。このタイプの例外処理を設定すると、しばしばパフォーマンスコストが発生するため、慎重に使用する必要があります。ルールのパフォーマンスは可能な限り最適である必要があります。より実用的なアプローチは、例外が発生した後に処理するのではなく、例外の発生を防ぐ処理を実装することです。ベストプラクティスの詳細については、パフォーマンスのベストプラクティスを参照してください。

ルールで初期化されていないオブジェクトを避ける

初期化されていないオブジェクトを使用すると、例外が発生する可能性があります。オブジェクトの存在が疑わしい場合は、宣言の一部として初期化を含めることをお勧めします。例えば: user.user_metadata = user.user_metadata || {}) ルールにおいて、最初から例外の発生を防ぐ措置を講じることがベストプラクティスであり、通常、例外処理を実装するよりもパフォーマンスとリソース使用の面でコストが低くなります。