Auth0におけるメールアドレス検索の実装

こんにちは、遠藤です。

今回はAuth0においてメールアドレス検索の実装についてです。

Auth0は認証機能としてはとても優秀と感じますが、検索機能等を実装しようとすると制限があり、苦労する点がいくつかあったのでその点を踏まえ、メールアドレス検索に焦点を当ててまとめさせていただきます。

  1. ワイルドカード検索の方法と制限
  2. 1回の検索で取得可能な最大件数
  3. 1000件以上の結果がある場合

ワイルドカード検索における制限

ワイルドカード検索、すなわち、前方一致検索や後方一致検索等について紹介します。

前提として以下がメールアドレスをもとに完全一致検索をする場合のURLです。

https://{client_domain }/api/v2/users?q=email:”sample@gamil.com”

前方一致の場合は以下のURLです。

https://{client_domain }/api/v2/users?q=email:sample*

また、後方一致の場合は以下のURLです。

https://{client_domain }/api/v2/users?q=email:*gamil.com

ここで注意が必要です。前方一致の場合は以下のURLのように1文字から許容されるのですが、後方一致の場合は3文字以上が条件となっています。

○:https://{client_domain }/api/v2/users?q=email:s*

×:https://{client_domain }/api/v2/users?q=email:*m

○:https://{client_domain }/api/v2/users?q=email:*com

制限はあるもののワイルドカード検索の機能が使えるのは便利ですが、user_metadataに保存したデータに関してはワイルドカード検索を使用できず、完全一致検索のみとなります。そのためできる限り、デフォルトのパラメーターに保存されたデータを使用してサービスの運用を実施することが求められます。

1回の検索で取得可能な最大件数

Auth0の検索APIには一度に取得可能な件数が50件に制限されています。そのため、50件を超える検索結果がある場合は、pageパラメーターを使用して取得する必要があります。

例えば、上記APIの前方一致検索等の結果が50件を超える場合は以下のように取得を実施します。

最初の50件取得

https://{client_domain }/api/v2/users?q=email:s*&page=0

50件〜100件取得

https://{client_domain }/api/v2/users?q=email:s*&page=1

100件〜150件取得

https://{client_domain }/api/v2/users?q=email:s*&page=2

また、何ページまで取得すれば良いのか判定するためには、検索結果の合計値が必要となりますが、

include_totalsパラメーターを使用することで取得できます。

例えば以下のようになります。

https://{client_domain }/api/v2/users?q=email:s*&page=0&include_totals=true

上記で、一度に取得可能な件数が50件に制限されているとしましたが、デフォルトで50件に制限されていますが、per_pageパラメーターを使用することで最大100件まで拡大できます。

例えば以下のようになります。

https://{client_domain }/api/v2/users?q=email:s*&page=0&per_page=100&include_totals=true

1000件以上の結果がある場合

1回に取得できる件数が最大100件、でも、pageを使ってループすれば全件取得できるから問題ない。そんな認識で使っていると、なぜか結果に表示されないユーザーがいる。その原因もAuth0の制限にありました。Auth0には最大1000件までしか返さないという制限がありました。

例えば2500件の検索結果が想定される状況で以下を実施すると

https://{client_domain }/api/v2/users?q=email:s*&page=0&per_page=100&include_totals=true

totalは2500となるはずですが、totalは1000となっていました。もちろん、pageに11や12を設定したとしても検索結果は表示されません。

1000件以上の検索結果を取得したい場合は別のAPIを使用する必要がありました。とは言っても検索用のAPIではなく、Auth0のDB情報をcsv出力し、そのcsvを読み込み、その中からプログラム側で検索処理を実装するという流れです。

使用するのは以下のAPIです。

https://{client_domain }/api/v2/jobs/users-exports

POSTで実施し、パラメーターとして以下の3つを設定します。

上記APIを実施することによってcsvが出力されますので、以降はファイルを読み込んで使用するという流れです。このcsv出力に関しては1000件以上の場合でも全件取得できます。ただこの方法は検索結果を得るのに時間がかかります。Auth0は認証サービスとしては優秀ですが、自前のDBと比較すると色々と制限の壁にあたるなという印象です。

参考資料

https://auth0.com/docs/manage-users/user-search/user-search-query-syntax

https://auth0.com/docs/manage-users/user-search/view-search-results-by-page

https://auth0.com/docs/manage-users/user-migration/bulk-user-exports#check-export-status



❏❏ TOPIC ❏❏ ------------------------------------------------------------

カスタム自由!フリーECサイトパッケージ
チャットボット導入サービス
WEBシステム開発・スマホアプリ開発はSRIAへ