Skip to main content

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

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

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

Rules の実行に使える時間には制限があります。詳しくは、Custom Database Action Script Execution Best Practices を参照してください。この制限時間内にエラー状態から回復できない場合、または回復できる見込みが低い場合は、エラー状態を明示的に返す必要があります。これは、次のように Node の Error オブジェクトのインスタンスを返して Rules の実行を終了するだけで行えます。 return callback(new Error('some description')); 詳しくは、Class: Error on nodejs.org を参照してください。 また、Auth0 固有の UnauthorizedError のインスタンスを返すこともできます。これにより、指定したエラーの説明を含む unauthorized エラー状態が、認証を開始したアプリケーション、つまり /authorize エンドポイントへのリダイレクトを開始したアプリケーションに返されます。これにより、アプリケーションで条件付きの再試行機能を提供できるほか、特定の条件に基づいてアクセスを拒否する Rules を実装できます。 return callback(new UnauthorizedError('some description'), user, context);

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

UnauthorizedError オブジェクトは、指定された説明のみを返します。未承認エラー状態に対して特定の処理を行うには、説明に簡単に参照できるエラー code 情報を含める形式にすることを推奨します。たとえば、次のようにします。 '[00043] - 固有のエラーの説明')

例外処理

キャッチされない JavaScript 例外など、予期しないエラーが発生すると、パイプラインの実行が途中で終了し、最終的に認証エラーが返されることがあります。 非同期処理を伴う場合は、Promise オブジェクトを扱う際に catch ハンドラーを使用する必要があります。Promise オブジェクトの処理は、非同期ではない処理でのエラー処理にも有効です。以下に示すように、Promise オブジェクトを使用して、たとえば同期関数の呼び出しをラップすることで、promise chaining などを使った連鎖的なエラー処理を実装しやすくなります。Promise オブジェクトの詳細については、MDN Web Docs の Promise を参照してください。promise chaining の詳細については、javascript.info の Error Handling with Promises を参照してください。
return new Promise(function(resolve, reject) {
    jwt.verify(
      token,
      secret,{
      clockTolerance: 5},
      function(err, decoded) {
        if (err) {
          reject(err);
        } else {
          resolve(decoded);
      }
    });
  });
また、同期処理中に発生する JavaScript 例外を処理するために、try...catch を使用することもできます。詳細については、MDN Web Docs の try...catch を参照してください。この種の例外処理を組み込むと、パフォーマンスコストが発生しやすいため、使用は最小限に抑えてください。ルールのパフォーマンスは、できるだけ最適な状態を保つ必要があります。より実践的なのは、例外が発生してから処理するのではなく、そもそも例外が発生しないような処理を実装することです。ベストプラクティスの詳細については、パフォーマンスのベストプラクティス を参照してください。

Rules で未初期化のオブジェクトを避ける

未初期化のオブジェクトを使用すると、例外が発生する可能性があります。オブジェクトが存在するかどうか不明な場合は、宣言時に初期化も含めることをお勧めします。例: user.user_metadata = user.user_metadata || {}) Rules では、そもそも例外が発生しないようにしておくことがベストプラクティスです。通常、例外処理を実装するよりも、パフォーマンスとリソース使用量の面で負荷を抑えられます。