Auth0のManagement APIでユーザ検索を試してみる

名前とかメールアドレスとかドメインとかログイン回数とかで、ユーザを検索できます。
2022.04.06

Auth0のManagement APIには、ユーザの一覧を取得するAPIがあります。

このAPIでは、クエリを使うことでユーザ検索ができるので、いくつか試してみました。

おすすめの方

  • Auth0のManagement APIを使いたい方
  • Auth0のManagement APIでユーザ検索をしたい方

ユーザ検索を試す

qパラメータを用いて、検索します。下記のドキュメントにクエリ例も記載されています。

注意

GET /api/v2/usersのAPIは、取得できるユーザ総数が1000に制限されています。 また、page(ページング)のリクエストがない場合は、1度の取得で50件のデータが返されます。

基本のコード

基本となるコードです。これ以降は、get_users()のみを記載します。

また、fieldsは、user_id,emailを指定しています。

app.py

import json
import requests

DOMAIN = 'your_domain.auth0.com'
CLIENT_ID = 'your client id'
CLIENT_SECRET = 'your client secret'
AUDIENCE = 'https://your_domain.auth0.com/api/v2/'


def main():
    token = get_token()

    get_users(token)


def get_token():
    headers = {'Content-Type': 'application/json'}

    url = f'https://{DOMAIN}/oauth/token'
    payloads = {
        'client_id': CLIENT_ID,
        'client_secret': CLIENT_SECRET,
        'audience': AUDIENCE,
        'grant_type': 'client_credentials',
    }

    res = requests.post(url, headers=headers, data=json.dumps(payloads))
    return res.json().get('access_token')


def get_users(token):
    headers = {'Authorization': f'Bearer {token}'}
    url = f'https://{DOMAIN}/api/v2/users?fields=user_id,email'

    response = requests.get(url, headers=headers)
    print(json.dumps(response.json(), indent=2))


if __name__ == '__main__':
    main()

メールアドレスが特定の文字で始まるユーザ

q=email:fujii*を使います。

app.py

def get_users(token):
    headers = {'Authorization': f'Bearer {token}'}
    url = f'https://{DOMAIN}/api/v2/users?fields=user_id,email&q=email:fujii*'

    response = requests.get(url, headers=headers)
    print(json.dumps(response.json(), indent=2))

ログイン回数が0件のユーザ

q=NOT _exists_:logins_count OR logins_count:0を使います。

app.py

def get_users(token):
    headers = {'Authorization': f'Bearer {token}'}
    url = f'https://{DOMAIN}/api/v2/users?fields=user_id,email&q=NOT _exists_:logins_count OR logins_count:0'

    response = requests.get(url, headers=headers)
    print(json.dumps(response.json(), indent=2))

メールアドレスが特定の文字で始まるユーザ、かつ、ログイン回数が0件のユーザ

q=email:fujii* AND logins_count:0を使います。

app.py

def get_users(token):
    headers = {'Authorization': f'Bearer {token}'}
    url = f'https://{DOMAIN}/api/v2/users?fields=user_id,email&q=email:fujii* AND logins_count:0'

    response = requests.get(url, headers=headers)
    print(json.dumps(response.json(), indent=2))

メールアドレスが未確認のユーザ

q=email_verified:false OR NOT _exists_:email_verifiedを使います。

app.py

def get_users(token):
    headers = {'Authorization': f'Bearer {token}'}
    url = f'https://{DOMAIN}/api/v2/users?fields=user_id,email&q=email_verified:false OR NOT _exists_:email_verified'

    response = requests.get(url, headers=headers)
    print(json.dumps(response.json(), indent=2))

メールアドレスのドメインが「example.com」に完全一致するユーザ

q=email.domain:"example.com"を使います。

app.py

def get_users(token):
    headers = {'Authorization': f'Bearer {token}'}
    url = f'https://{DOMAIN}/api/v2/users?fields=user_id,email&q=email.domain:"example.com"'

    response = requests.get(url, headers=headers)
    print(json.dumps(response.json(), indent=2))

特定の期間に新規登録したユーザ

q=created_at:[2022-03-01 TO 2022-03-31]を使います。

app.py

def get_users(token):
    headers = {'Authorization': f'Bearer {token}'}
    url = f'https://{DOMAIN}/api/v2/users?fields=user_id,email&q=created_at:[2022-03-01 TO 2022-03-31]'

    response = requests.get(url, headers=headers)
    print(json.dumps(response.json(), indent=2))

ブロックされているユーザ

q=blocked:trueを使います。

app.py

def get_users(token):
    headers = {'Authorization': f'Bearer {token}'}
    url = f'https://{DOMAIN}/api/v2/users?fields=user_id,email&q=blocked:true'

    response = requests.get(url, headers=headers)
    print(json.dumps(response.json(), indent=2))

さいごに

クエリ例やユーザ検索のベストプラクティスもあるので、こちらも確認すると良いですね。

参考