> ## 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.

> post-login Action トリガーを使用して、ユーザーの Login フローの一部として user_metadata と app_metadata を変更する方法を説明します。

# post-login Action トリガーを使用したユーザーメタデータの管理

Auth0 には、Auth0 のユーザープロフィールに [メタデータ](/ja/docs/manage-users/user-accounts/metadata) を保存するための充実した仕組みがあります。`post-login` トリガーを設定すると、ユーザーの Login フローの一部として `user_metadata` と `app_metadata` を変更できます。Post-login トリガーは、アプリケーション固有のデータをユーザープロフィールに保存したり、ユーザーの操作ログを記録したり、<Tooltip tip="Security Assertion Markup Language (SAML): パスワードなしで 2 者間の認証情報の交換を可能にする標準化プロトコル。" cta="用語集を表示" href="/ja/docs/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 には参照先 (ユーザー ID) を保存することです。

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

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

ユーザープロフィールの更新呼び出しが 1 回だけであっても、その操作には引き続きテナントの "Write User" [レート制限](/ja/docs/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()` によって Redirect が呼び出された場合、保留中のユーザーまたはアプリのメタデータ更新は、ユーザーが外部サイトにリダイレクトされる前にユーザープロフィールへ適用されます。詳細は、[Actions を使用したリダイレクト](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/redirect-with-actions)を参照してください。

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

* [Actions でのリダイレクト](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/redirect-with-actions)
