> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ユーザーのログインフローの一部として `user_metadata` と `app_metadata` を変更するために、post-login Action トリガーを使用する方法を学びます。

# post-login Action トリガーで User Metadata を管理する

Auth0 には、Auth0 ユーザープロファイルに[メタデータ](/docs/ja-jp/manage-users/user-accounts/metadata)を保存するための豊富な仕組みがあります。ユーザーのログインフローの一部として `user_metadata` と `app_metadata` を変更できるよう、`post-login` トリガーを設定できます。Post-login トリガーは、ユーザープロファイルにアプリケーション固有のデータを保存したり、ユーザー操作のログを記録したり、<Tooltip tip="Security Assertion Markup Language (SAML): パスワードなしで 2 者間が認証情報をやり取りできるようにする標準化されたプロトコル。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=SAML">SAML</Tooltip> 属性をメタデータフィールドにマッピングしたり、将来のログインで再利用するためにコストの高い処理結果をユーザープロファイルにキャッシュしたりする用途に役立ちます。

`post-login` の `api` オブジェクトでは、このトリガーで実行できる一般的な操作が提供されています。ユーザーメタデータを管理するには、`api.user.setAppMetadata` メソッドと `api.user.setUserMetadata` メソッドを使用します。たとえば、特定のユーザーに対して同じ処理が複数回実行されないようにするには、次のような Action を検討してください。

```js lines theme={null}
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 回だけです。つまり、トリガーの実行の最後に更新されます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  `setUserMetadata` または `setAppMetadata` が複数回呼び出された場合でも、異なる Actions によるものであっても、トリガーの実行の最後に 1 回のユーザープロファイル更新としてまとめて処理されます。
</Callout>

<div id="best-practices">
  ## ベストプラクティス
</div>

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

<div id="rate-limits">
  ## レート制限
</div>

<Warning>
  ユーザーおよびアプリのメタデータの設定はテナントのレート制限の対象となるため、ログインのスループットに影響する場合があります。
</Warning>

ユーザープロファイルの更新に対する呼び出しは 1 回だけでも、その操作はテナントの「Write User」[レート制限](/docs/ja-jp/troubleshoot/customer-support/operational-policies/rate-limit-policy/management-api-endpoint-rate-limits)の対象です。メタデータの更新時にレート制限に達した場合、`429` HTTP ステータスコードが返される限り、Actions はリクエストを再試行します。再試行の間隔は、`429` レスポンスの一部として返される `X-RateLimit-Reset` ヘッダーの値によって決まります。

<div id="redirects">
  ## リダイレクト
</div>

`api.redirect.sendUserTo()` によってリダイレクトが実行されると、保留中のユーザーまたはアプリのメタデータの更新は、ユーザーが外部サイトにリダイレクトされる前にユーザープロファイルに適用されます。詳しくは、[Actions を使ったリダイレクト](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/redirect-with-actions)を参照してください。

<div id="learn-more">
  ## 詳しくはこちら
</div>

* [Actions を使用してリダイレクトする](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/redirect-with-actions)
