この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
メールアドレスを使って、Auth0のユーザ情報を取得してみます。想定のユースケースは以下です。
- ユーザ登録済みか? を確認したい
- メールアドレスからユーザIDを取得したい
おすすめの方
- Auth0のManagement APIを使いたい方
- Auth0のManagement APIで「Search Users by Email」を使いたい方
Auth0テナントを準備する
Auth0テナントを作成する
適当にAuth0テナントを作成します。既存のAuth0テナントでもOKです。
E2Eアプリケーションを作成する
E2Eアプリケーションを作製します。既存のE2EアプリケーションでもOKです。read:users
の権限が必要です。
メールアドレスからユーザ情報を取得する
次のサンプルコードを使います。
Pythonのサンプルコード
メールアドレスのURLエンコードを忘れずに行います。
また、メールアドレスは次のように扱われます。詳細は公式ドキュメントを参照してください。
- Auth0がidPのとき: メールアドレスは、すべて小文字
- Auth0がidPでない: メールアドレスは、idPのルールに従う
sample.py
import json
import urllib.parse
import requests
CLIENT_ID = 'your client id'
CLIENT_SECRET = 'your client secret'
AUDIENCE = 'your audience'
ENDPOINT = 'your endpoint'
TARGET_EMAIL = 'sample+test@example.com'
def main():
access_token = get_access_token()
user_id = get_user_id_by_email(access_token, TARGET_EMAIL)
print(user_id)
def get_access_token() -> str:
headers = {'content-type': 'application/json'}
payload = {
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET,
'audience': AUDIENCE,
'grant_type': 'client_credentials',
}
resp = requests.post(f'{ENDPOINT}/oauth/token', headers=headers, data=json.dumps(payload))
return resp.json()['access_token']
def get_user_id_by_email(access_token: str, email: str) -> str:
headers = { 'Authorization': f'Bearer {access_token}'}
# URLエンコードをする
email_quote = urllib.parse.quote(email)
# fieldsの指定を変更すれば、ユーザID以外も取得可能
# https://auth0.com/docs/api/management/v2#!/Users_By_Email/get_users_by_email
resp = requests.get(f'{AUDIENCE}users-by-email?email={email_quote}&fields=user_id', headers=headers)
return resp.json()[0]['user_id']
if __name__=='__main__':
main()
URLエンコードによって、メールアドレスが次のようになります。
- before: sample+test@example.com
- after: sample%2Btest%40example.com
実行!
無事に取得できました。
$ python sample.py
auth0|xxxyyyzzz