エラーログを外部サービスに送信する
Rules でエラー オブジェクトを使用する
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] - 固有のエラーの説明')
例外処理
Promise オブジェクトを扱う際に catch ハンドラーを使用する必要があります。Promise オブジェクトの処理は、非同期ではない処理でのエラー処理にも有効です。以下に示すように、Promise オブジェクトを使用して、たとえば同期関数の呼び出しをラップすることで、promise chaining などを使った連鎖的なエラー処理を実装しやすくなります。Promise オブジェクトの詳細については、MDN Web Docs の Promise を参照してください。promise chaining の詳細については、javascript.info の Error Handling with Promises を参照してください。
try...catch を使用することもできます。詳細については、MDN Web Docs の try...catch を参照してください。この種の例外処理を組み込むと、パフォーマンスコストが発生しやすいため、使用は最小限に抑えてください。ルールのパフォーマンスは、できるだけ最適な状態を保つ必要があります。より実践的なのは、例外が発生してから処理するのではなく、そもそも例外が発生しないような処理を実装することです。ベストプラクティスの詳細については、パフォーマンスのベストプラクティス を参照してください。
Rules で未初期化のオブジェクトを避ける
user.user_metadata = user.user_metadata || {})
Rules では、そもそも例外が発生しないようにしておくことがベストプラクティスです。通常、例外処理を実装するよりも、パフォーマンスとリソース使用量の面で負荷を抑えられます。