メインコンテンツへスキップ
Auth0 には、Auth0 のユーザープロフィールに メタデータ を保存するための充実した仕組みがあります。post-login トリガーを設定すると、ユーザーの Login フローの一部として user_metadataapp_metadata を変更できます。Post-login トリガーは、アプリケーション固有のデータをユーザープロフィールに保存したり、ユーザーの操作ログを記録したり、 属性をメタデータフィールドにマッピングしたり、将来のログインで再利用するためにコストの高い処理結果をユーザープロファイルにキャッシュしたりする用途に役立ちます。 post-loginapi オブジェクトでは、このトリガーで実行できる一般的な操作を利用できます。ユーザーメタデータを管理するには、api.user.setAppMetadata メソッドと api.user.setUserMetadata メソッドを使用します。たとえば、特定のユーザーに対して同じ動作が複数回実行されないようにするには、次のような Action を検討してください。
exports.onExecutePostLogin = async (event, api) => {
  if (event.user.app_metadata.didAnExpensiveTask) {
    console.log(`Skipping the expensive task because it already occurred for ${event.user.email}.`);
    return;
  }
  // コストのかかるタスクを実行する
  api.user.setAppMetadata("didAnExpensiveTask", true);
};
ここでは、このユーザーに対してコストの高い処理をすでに実行しているかどうかを確認するため、Action の冒頭にチェックを追加しています。メタデータフィールドが存在する場合は、関数から return します。 Action の最後で、api.user.setAppMetadata を呼び出し、ユーザーオブジェクトにメタデータを保存するよう指定します。各トリガーの実行が終了すると、Actions はユーザープロフィールを 1 回の操作で更新します。setUserMetadata を複数回呼び出した場合でも、それらが同じフロー内の異なる Actions から行われていれば、Actions がユーザープロフィールを更新するのはトリガーの実行終了時の 1 回だけです。
setUserMetadata または setAppMetadata を複数回呼び出した場合でも、異なる Actions から行われたものであっても、トリガーの実行終了時に 1 回のユーザープロフィール更新としてまとめて処理されます。

ベストプラクティス

Auth0 のユーザープロファイルにデータを保存しすぎないよう注意してください。これらのデータは認証と認可のために使用することを想定しており、ユーザーは自分の user_metadata フィールドを編集できるため、機密データは保存しないでください。Auth0 のメタデータ機能と検索機能は、マーケティング調査や、検索や更新が高頻度で発生するその他の用途向けには設計されていません。この目的で Auth0 を使用すると、システムでスケーラビリティやパフォーマンスの問題が発生する可能性があります。より適切な方法は、外部システムにデータを保存し、必要に応じてバックエンドシステムがそのデータを取得できるよう、Auth0 には参照先 (ユーザー ID) を保存することです。

レート制限

ユーザーおよびアプリのメタデータの設定は、テナントのレート制限の対象となり、ログインのスループットに影響する可能性があります。
ユーザープロフィールの更新呼び出しが 1 回だけであっても、その操作には引き続きテナントの “Write User” レート制限 が適用されます。メタデータの更新時にレート制限に達した場合、429 HTTP ステータスコードが返される限り、Actions はリクエストを再試行します。再試行の間隔は、429 レスポンスの一部として返される X-RateLimit-Reset ヘッダーの値によって決まります。

リダイレクト

api.redirect.sendUserTo() によって Redirect が呼び出された場合、保留中のユーザーまたはアプリのメタデータ更新は、ユーザーが外部サイトにリダイレクトされる前にユーザープロフィールへ適用されます。詳細は、Actions を使用したリダイレクトを参照してください。

詳細はこちら