AWS Cognito ページネーショントークンで全ユーザーを取得する
list_users( ) にはlimitがあった
100以上ユーザーを登録しているのに、list_users後のresponseを見ていたら存在するはずのメールアドレスが表示されていないことに気づいた。そこでログを出してみると、、、なぜか60人しか取れていなかった。
Boto3 Docsには以下の記述がある。
Limit (integer) -- Maximum number of users to be returned.
最大値を引数で指定できる。試しにLimit=200
にすると、
Value '200' at 'limit' failed to satisfy constraint: Member must have value less than or equal to 60
60までしか指定できないとのこと。デフォルトですでに最大数に達していた。
PaginationToken (string) -- An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list.
前の検索からさらに結果を取得するためのトークンです。
このページネーショントークンがここから活躍する。list_users()の引数に、前回のlist_users()のレスポンスに含まれるPaginationToken
を与えると、まだ取得していないユーザーを返してくれる。ただし、これ以上次のユーザーがいない場合、PaginationToken
はレスポンスに含まれない。つまり、すべてのユーザーを取得したかどうかは、PaginationToken
がレスポンスに含まれているかどうかを見ればよい。
サンプルコード
以下のコードはページネーショントークンを使って全ユーザーを取得する。特にget_user_list()
でトークンを使っている。
import boto3
import json
def get_user_list(event):
client = boto3.client('cognito-idp')
# 最初のユーザー取得時はページネーション引数を指定しないこと
# botocore/validate.pyで例外として処理される
response = client.list_users(
UserPoolId='ap-northeast-1_XXXXXXXXXX'
)
user_datas = []
append_user_dict(response, user_datas)
while True:
# ページネーショントークンがレスポンスに含まれなくなったらループ終了
if 'PaginationToken' not in response:
break
# 前回のレスポンスに含まれるページネーショントークンを渡す
response = client.list_users(
UserPoolId='ap-northeast-1_XXXXXXXXX',
PaginationToken=response['PaginationToken']
)
append_user_dict(response, user_datas)
return user_datas
def append_user_dict(response, user_datas):
"""
ユーザー名とメールアドレスを辞書型で取得し、user_datasに追加するメソッド
"""
for x in response['Users']:
user_data = {}
user_data['Username'] = x['Username']
user_data['email'] = get_email(x['Attributes'])
user_datas.append(user_data)
def get_email(attr_list):
"""
レスポンスに含まれる各ユーザー情報からメールアドレスを抽出するメソッド
"""
for x in attr_list:
if x['Name'] == 'email':
return x['Value']
return None
def lambda_handler(event, context):
"""
True:クライアントのメールアドレスが
まだユーザープールに登録されていない
False:クライアントのメールアドレスが
すでにユーザープールに登録されてるいる
"""
user_datas = get_user_list(event)
# user_datasを出力
print(user_datas)
return (event['email'] not in
[user_data['email'] for user_data in user_datas])
user_datasの結果
[{'Username': 'dummy-user-557', 'email': '[email protected]'}, {'Username': 'dummy-user-558', 'email': '[email protected]'}, {'Username': 'dummy-user-559', 'email': '[email protected]'}, {'Username': 'dummy-user-560', 'email': '[email protected]'}, {'Username': 'dummy-user-561', 'email': '[email protected]'}, {'Username': 'dummy-user-562', 'email': '[email protected]'}, {'Username': 'dummy-user-563', 'email': '[email protected]'}, {'Username': 'dummy-user-564', 'email': '[email protected]'}, {'Username': 'dummy-user-565', 'email': '[email protected]'}, {'Username': 'dummy-user-566', 'email': '[email protected]'}, {'Username': 'dummy-user-567', 'email': '[email protected]'}, {'Username': 'dummy-user-568', 'email': '[email protected]'}, {'Username': 'dummy-user-569', 'email': '[email protected]'}, {'Username': 'dummy-user-570', 'email': '[email protected]'}, {'Username': 'dummy-user-571', 'email': '[email protected]'}, {'Username': 'dummy-user-572', 'email': '[email protected]'}, {'Username': 'dummy-user-573', 'email': '[email protected]'}, {'Username': 'dummy-user-574', 'email': '[email protected]'}, {'Username': 'dummy-user-575', 'email': '[email protected]'}, {'Username': 'dummy-user-576', 'email': '[email protected]'}, {'Username': 'dummy-user-577', 'email': '[email protected]'}, {'Username': 'dummy-user-578', 'email': '[email protected]'}, {'Username': 'dummy-user-579', 'email': '[email protected]'}, {'Username': 'dummy-user-580', 'email': '[email protected]'}, {'Username': 'dummy-user-581', 'email': '[email protected]'}, {'Username': 'dummy-user-582', 'email': '[email protected]'}, {'Username': 'dummy-user-583', 'email': '[email protected]'}, {'Username': 'dummy-user-584', 'email': '[email protected]'}, {'Username': 'dummy-user-585', 'email': '[email protected]'}, {'Username': 'dummy-user-586', 'email': '[email protected]'}, {'Username': 'dummy-user-587', 'email': '[email protected]'}, {'Username': 'dummy-user-588', 'email': '[email protected]'}, {'Username': 'dummy-user-589', 'email': '[email protected]'}, {'Username': 'dummy-user-590', 'email': '[email protected]'}, {'Username': 'dummy-user-591', 'email': '[email protected]'}, {'Username': 'dummy-user-592', 'email': '[email protected]'}, {'Username': 'dummy-user-593', 'email': '[email protected]'}, {'Username': 'dummy-user-594', 'email': '[email protected]'}, {'Username': 'dummy-user-595', 'email': '[email protected]'}, {'Username': 'dummy-user-596', 'email': '[email protected]'}, {'Username': 'dummy-user-597', 'email': '[email protected]'}, {'Username': 'dummy-user-598', 'email': '[email protected]'}, {'Username': 'dummy-user-599', 'email': '[email protected]'}, {'Username': 'dummy-user-600', 'email': '[email protected]'}, {'Username': 'dummy-user-601', 'email': '[email protected]'}, {'Username': 'dummy-user-602', 'email': '[email protected]'}, {'Username': 'dummy-user-603', 'email': '[email protected]'}, {'Username': 'dummy-user-604', 'email': '[email protected]'}, {'Username': 'dummy-user-605', 'email': '[email protected]'}, {'Username': 'dummy-user-606', 'email': '[email protected]'}, {'Username': 'dummy-user-607', 'email': '[email protected]'}, {'Username': 'dummy-user-608', 'email': '[email protected]'}, {'Username': 'dummy-user-609', 'email': '[email protected]'}, {'Username': 'dummy-user-610', 'email': '[email protected]'}, {'Username': 'dummy-user-611', 'email': '[email protected]'}, {'Username': 'dummy-user-612', 'email': '[email protected]'}, {'Username': 'dummy-user-613', 'email': '[email protected]'}, {'Username': 'dummy-user-614', 'email': '[email protected]'}, {'Username': 'dummy-user-615', 'email': '[email protected]'}, {'Username': 'dummy-user-616', 'email': '[email protected]'}, {'Username': 'dummy-user-617', 'email': '[email protected]'}, {'Username': 'dummy-user-618', 'email': '[email protected]'}, {'Username': 'dummy-user-619', 'email': '[email protected]'}, {'Username': 'dummy-user-620', 'email': '[email protected]'}, {'Username': 'dummy-user-621', 'email': '[email protected]'}, {'Username': 'dummy-user-622', 'email': '[email protected]'}, {'Username': 'dummy-user-623', 'email': '[email protected]'}, {'Username': 'dummy-user-624', 'email': '[email protected]'}, {'Username': 'dummy-user-625', 'email': '[email protected]'}, {'Username': 'dummy-user-626', 'email': '[email protected]'}, {'Username': 'dummy-user-627', 'email': '[email protected]'}, {'Username': 'dummy-user-628', 'email': '[email protected]'}, {'Username': 'dummy-user-629', 'email': '[email protected]'}, {'Username': 'dummy-user-630', 'email': '[email protected]'}, {'Username': 'dummy-user-631', 'email': '[email protected]'}, {'Username': 'dummy-user-632', 'email': '[email protected]'}, {'Username': 'dummy-user-633', 'email': '[email protected]'}, {'Username': 'dummy-user-634', 'email': '[email protected]'}, {'Username': 'dummy-user-635', 'email': '[email protected]'}, {'Username': 'dummy-user-636', 'email': '[email protected]'}, {'Username': 'dummy-user-637', 'email': '[email protected]'}, {'Username': 'dummy-user-638', 'email': '[email protected]'}, {'Username': 'dummy-user-639', 'email': '[email protected]'}, {'Username': 'dummy-user-640', 'email': '[email protected]'}, {'Username': 'dummy-user-641', 'email': '[email protected]'}, {'Username': 'dummy-user-642', 'email': '[email protected]'}, {'Username': 'dummy-user-643', 'email': '[email protected]'}, {'Username': 'dummy-user-644', 'email': '[email protected]'}, {'Username': 'dummy-user-645', 'email': '[email protected]'}, {'Username': 'dummy-user-646', 'email': '[email protected]'}, {'Username': 'dummy-user-647', 'email': '[email protected]'}, {'Username': 'dummy-user-648', 'email': '[email protected]'}, {'Username': 'dummy-user-649', 'email': '[email protected]'}, {'Username': 'dummy-user-650', 'email': '[email protected]'}, {'Username': 'dummy-user-651', 'email': '[email protected]'}, {'Username': 'dummy-user-652', 'email': '[email protected]'}, {'Username': 'dummy-user-653', 'email': '[email protected]'}, {'Username': 'dummy-user-654', 'email': '[email protected]'}, {'Username': 'dummy-user-655', 'email': '[email protected]'}, {'Username': 'dummy-user-656', 'email': '[email protected]'}, {'Username': 'dummy-user-657', 'email': '[email protected]'}, {'Username': 'dummy-user-658', 'email': '[email protected]'}, {'Username': 'dummy-user-659', 'email': '[email protected]'}]
参考記事
Author And Source
この問題について(AWS Cognito ページネーショントークンで全ユーザーを取得する), 我々は、より多くの情報をここで見つけました https://qiita.com/quryu/items/c7313fb273c415976e40著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .