この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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))
さいごに
クエリ例やユーザ検索のベストプラクティスもあるので、こちらも確認すると良いですね。