> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-fix-docs-5528-php-updates.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# ログイン後のアクショントリガーでユーザーメタデータを管理する

> ログイン後のアクショントリガーで、user_metadataとapp_metadataをユーザーのログインフローの一部として変更する方法について説明します。

Auth0は豊富なシステムを提供して、Auth0ユーザープロファイルに[メタデータ](/docs/ja-jp/manage-users/user-accounts/metadata)を保管できるようにしています。`post-login`トリガーを構成すると、`user_metadata`と`app_metadata`をユーザーのログインフローの一部として変更できるようになります。ログイン後のトリガーは、ユーザープロファイルにアプリケーション固有のデータを保存したり、ユーザー操作ログをキャプチャしたり、<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-1" href="/docs/ja-jp/glossary?term=security-assertion-markup-language" tip="Security Assertion Markup Language（SAML）: パスワードなしに二者間で認証情報を交換できる標準化プロトコル。" cta="用語集の表示">SAML</Tooltip>属性をメタデータフィールドにマッピングしたり、ユーザープロファイルにあるコストのかかる操作値をキャッシュして今後のログインに再利用したりなどの作業に役立ちます。

`post-login``api`オブジェクトには、このトリガーで実行できる一般的な操作があります。ユーザーメタデータを管理するには、`api.user.setAppMetadata`メソッドと`api.user.setUserMetadata`メソッドを使用します。たとえば、特定のユーザーに何らかの動作が複数回にわたって実行されるのを防ぐには、以下のようなアクションを検討します。

```javascript 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;
  }
  // do and expensive task
  api.user.setAppMetadata("didAnExpensiveTask", true);
};
```

ここでは、アクションの初めに、ユーザーに高コストなタスクがすでに実行されているかの確認を追加しています。メタデータフィールドが存在する場合は、関数から戻ります。

アクションの終わりに、`api.user.setAppMetadata`を呼び出して、ユーザーオブジェクトにある一部のメタデータを保存したいと示します。各トリガーの実行終了時に、アクションはユーザープロファイルを単一操作で更新します。`setUserMetadata`アクションが複数回呼び出された場合（同じフローの異なるアクションで呼び出された場合であっても）、ユーザープロファイルの更新はトリガーの実行が終わったときの1回だけになります。

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

## ベストプラクティス

Auth0のプロファイルに保管するデータは多すぎないようにします。このデータは、認証と認可に使用されることを目的としています。ユーザーが自分の`user_metadata`フィールドを編集できるため、機微データを保管してはいけません。Auth0のメタデータと検索機能は、市場調査や高い検索・更新の頻度が必要なものを想定して設計されていません。Auth0をそのような目的で使用すると、ほぼ確実にシステムの拡張性や性能に問題が生じます。データを外部システムに保管して、Auth0にポインター（ユーザーID）を保管した方が、バックエンドシステムが必要に応じてデータを取得できます。

## レート制限

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

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

## リダイレクト

`api.redirect.sendUserTo()`でリダイレクトが行われる場合には、保留中のユーザーやアプリのメタデータ更新がユーザープロファイルに適用されてから、ユーザーが外部サイトにリダイレクトされます。詳細については、「[アクションを使用してリダイレクトする](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/redirect-with-actions)」を参照してください。

## もっと詳しく

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