Auth0のActionsでuser_metadataを利用する

## 背景
アプリケーションにて、Auth0のUserと自社データベースのデータを紐づけるために、Auth0のuser_metadataを利用していました。
しかし、Auth0のAuth PipelineのRulesが廃止するということで、Actionsで実装をするように変更する必要がでてきたので、その実装のメモになります。

実際に既存のルールは2024年11月18日まで有効と書かれています。
![Screenshot 2023-11-10 at 18.02.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/83113cf4-df58-4db3-4631-db9afd5f15db.png)

## user_metadataを設定する
手動でuser_metadataを追加することはあまりありませんが、今回は検証のために手動で追加します。
サイドメニューのUser ManagementのUsersからユーザー一覧を表示します。

![Screenshot 2023-11-10 at 19.23.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/7643b7d1-ce4b-542d-db50-34c0377360bd.png)

今回user_metadataを付与したいユーザーを一覧から選択し、クリックします。

![Screenshot 2023-11-10 at 19.32.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/4b449535-a435-07a4-526e-cf567449b9bc.png)

下の方にスクロールしていくと、Metadataがあります。
今回はuser_metadataを付与したいので、user_metadata欄に例として`user_id`を追加しています。
これで左下のSaveをクリックすればuser_metadataに`user_id`というデータの付与が完了になります。

![Screenshot 2023-11-10 at 19.34.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/c7ec971e-e89f-d107-a7f5-0cdf645d516c.png)




## 従来の方法： Rulesを作成し、user_metadataを取得する
左のサイドメニューのAuth PipelineのRuleをクリックし、Rules画面を開きます。

![Screenshot 2023-11-10 at 19.48.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/48dfec6f-1d84-f6dd-fdf7-47eda3f2a4ec.png)

その後、右上のCreateボタンをクリックし、新規にRuleを作成します。

![Screenshot 2023-11-10 at 18.26.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/39bd7250-80f9-8b55-2ab0-d48943e9397b.png)



廃止することについての警告がでますが、理解した上で右側の赤ボタンをクリックします。

![Screenshot 2023-11-10 at 18.27.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/e6a959de-c159-00be-dbcf-6329f344c5af.png)



Pick a rules templateのEmptyからEmpty ruleをクリックします。

![Screenshot 2023-11-10 at 18.28.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/71f7994a-96a1-1afe-a81a-45ff84e84eef.png)





user_metadataを取得するためのスクリプトをセットします。

![Screenshot 2023-11-10 at 18.29.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/f3e9e1f0-88a3-ed2d-e155-934a2a1a7f8b.png)

Script欄に以下のコードを貼り付けることで、userから`user_metadata`を参照することができるようになります。
セットし、右下のSave Changesをクリックすれば完了です。

```javascript
function (user, context, callback) {
  context.idToken.user_metadata = user.user_metadata;
  callback(null, user, context);
}
```

## 今後の方法： Flows（Actions）を作成し、user_metadataを取得する
左のサイドメニューのActionsのFlowsをクリックし、Flows画面を開きます。

![Screenshot 2023-11-10 at 19.47.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/ecb84bdd-ea5a-86cd-d866-bcd0bcdf59e2.png)

Loginをクリックして、右側にあるAdd Actionの＋ボタンからBuild Customをクリックします。

![Screenshot 2023-11-10 at 19.58.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/fe0d6eb7-f8a7-1442-22fc-64e3b0dfa2a1.png)


NameにActionの名前を設定します。
Triggerは「Login / Post Login」にし、
Runtimeは、環境に合わせたものもしくはRecommendedでいいかと思います。
入力ができたら、右下のCreateで作成します。

![Screenshot 2023-11-10 at 20.01.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/9cc9cc66-d626-b7d0-ba06-f60e50ea389a.png)


作成すると、このように関数を設定することができる画面がでてきます。

![Screenshot 2023-11-10 at 20.06.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/afe30f25-f6bb-0147-1a77-2f2fcaaae725.png)

user_metadataを取得するための関数は以下になります。
この関数をそのまま上書きしてあげることで従来と同じように取得ができるようになります。

```javascript
exports.onExecutePostLogin = async (event, api) => {
  if (event.authorization) {
    api.idToken.setCustomClaim("user_metadata", event.user.user_metadata);
  }
};
```

関数をセットすることができたら、右上のDeployをクリックしてデプロイします。

![Screenshot 2023-11-10 at 20.18.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/8893b331-9f74-5f66-baf3-9cef8386ae75.png)

デプロイしたActionをFlowsに組み込みます。
FlowsのLoginに戻り、先ほどデプロイしたActionを表示します。

![Screenshot 2023-11-10 at 20.21.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/c2aa6781-dc45-fb63-2508-c7ad1b01ec68.png)

このGetUserMetadataをドラッグ&ドロップで右側のFlowsにセットします。

![Screenshot 2023-11-10 at 20.23.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/4cdb449c-cf50-10b2-b28b-dfa55a748267.png)

右上のApplyをクリックして、Flowsを適用させます。

![Screenshot 2023-11-10 at 20.24.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/2fc7224f-1d6a-d9f9-7407-7a86780b6361.png)

## 設定適用後のデータを確認する
User ManagementのUsersからuser_metadataをセットしたユーザーを開き、Raw JSONタブを開きます。
user_metadataが返却値として表示されていれば、確認完了です。

![Screenshot 2023-11-10 at 20.31.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/7f8d8b04-8053-56b9-6abe-8767f018a6f5.png)


ちなみに、Auth0のB2C無料プランでは、アクションは3つまで作成することができるようです。
Auth0は大変便利なサービスですね〜！

![Screenshot 2023-11-10 at 20.37.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285103/11b647f2-068d-10b8-8749-f2089b53f58a.png)