提问者:小点点

aws cognito list users函数只返回60个用户


我需要列出cognito用户池的所有用户。是否有任何方法返回用户池的所有用户?

下面代码中类似boto3-client的list_users函数只返回60个用户,而不是所有用户。

client = boto3.client('cognito-idp',
                         region_name=aws_region,
                         aws_access_key_id=aws_access_key,
                         aws_secret_access_key=aws_secret_key,
                         config=config)

print('Setup client')

response = client.list_users(
UserPoolId=userpool_id,
AttributesToGet=[
    'email','sub'
] 
)

预期结果是一个json对象列表,其中包括cognito用户组的所有用户


共2个答案

匿名用户

你看到了预期的结果。一次可以请求60个或更少的用户。您需要使用分页令牌才能遍历用户池中存在的所有用户。具体参见API文档LimitPaginationToken参数(重点):

要返回的最大用户数。

类型:整数
有效范围:最小值为0。最大值为60
必填项:否

从上次调用此操作返回的标识符,可用于返回列表中的下一组项。

类型:字符串
长度限制:最小长度为1。
模式:[\S]
必需:否

匿名用户

@A. Khan的答案是正确的。下面我已经编码了1种方法来做到这一点:

def get_all_users():
    cognito = boto3.client('cognito-idp')
    
    users = []
    next_page = None
    kwargs = {
        'UserPoolId': "whatever_your_user_pool_id_is"
    }

    users_remain = True
    while(users_remain):
        if next_page:
            kwargs['PaginationToken'] = next_page
        response = cognito.list_users(**kwargs)
        users.extend(response['Users'])
        next_page = response.get('PaginationToken', None)
        users_remain = next_page is not None

   return users