背景
アプリケーションにて、Auth0のUserと自社データベースのデータを紐づけるために、Auth0のuser_metadataを利用していました。
しかし、Auth0のAuth PipelineのRulesが廃止するということで、Actionsで実装をするように変更する必要がでてきたので、その実装のメモになります。
実際に既存のルールは2024年11月18日まで有効と書かれています。
user_metadataを設定する
手動でuser_metadataを追加することはあまりありませんが、今回は検証のために手動で追加します。
サイドメニューのUser ManagementのUsersからユーザー一覧を表示します。
今回user_metadataを付与したいユーザーを一覧から選択し、クリックします。
下の方にスクロールしていくと、Metadataがあります。
今回はuser_metadataを付与したいので、user_metadata欄に例としてuser_id
を追加しています。
これで左下のSaveをクリックすればuser_metadataにuser_id
というデータの付与が完了になります。
従来の方法: Rulesを作成し、user_metadataを取得する
左のサイドメニューのAuth PipelineのRuleをクリックし、Rules画面を開きます。
その後、右上のCreateボタンをクリックし、新規にRuleを作成します。
廃止することについての警告がでますが、理解した上で右側の赤ボタンをクリックします。
Pick a rules templateのEmptyからEmpty ruleをクリックします。
user_metadataを取得するためのスクリプトをセットします。
Script欄に以下のコードを貼り付けることで、userからuser_metadata
を参照することができるようになります。
セットし、右下のSave Changesをクリックすれば完了です。
function (user, context, callback) {
context.idToken.user_metadata = user.user_metadata;
callback(null, user, context);
}
今後の方法: Flows(Actions)を作成し、user_metadataを取得する
左のサイドメニューのActionsのFlowsをクリックし、Flows画面を開きます。
Loginをクリックして、右側にあるAdd Actionの+ボタンからBuild Customをクリックします。
NameにActionの名前を設定します。
Triggerは「Login / Post Login」にし、
Runtimeは、環境に合わせたものもしくはRecommendedでいいかと思います。
入力ができたら、右下のCreateで作成します。
作成すると、このように関数を設定することができる画面がでてきます。
user_metadataを取得するための関数は以下になります。
この関数をそのまま上書きしてあげることで従来と同じように取得ができるようになります。
exports.onExecutePostLogin = async (event, api) => {
if (event.authorization) {
api.idToken.setCustomClaim("user_metadata", event.user.user_metadata);
}
};
関数をセットすることができたら、右上のDeployをクリックしてデプロイします。
デプロイしたActionをFlowsに組み込みます。
FlowsのLoginに戻り、先ほどデプロイしたActionを表示します。
このGetUserMetadataをドラッグ&ドロップで右側のFlowsにセットします。
右上のApplyをクリックして、Flowsを適用させます。
設定適用後のデータを確認する
User ManagementのUsersからuser_metadataをセットしたユーザーを開き、Raw JSONタブを開きます。
user_metadataが返却値として表示されていれば、確認完了です。
ちなみに、Auth0のB2C無料プランでは、アクションは3つまで作成することができるようです。
Auth0は大変便利なサービスですね〜!