You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python Boto3获取AWS Cognito的排序用户列表?

解决AWS Cognito list_users返回结果无排序的问题

AWS Cognito的list_users接口确实没有内置排序参数,返回结果的顺序是随机的(基于底层存储的遍历顺序),所以要实现排序只能在本地处理,步骤如下:

1. 先获取全量分页用户数据

因为接口是分页返回的,必须先把所有页的用户数据拉取完整,才能保证排序的准确性。用boto3实现分页可以用get_paginator:

import boto3

client = boto3.client('cognito-idp')

def get_all_users(user_pool_id):
    paginator = client.get_paginator('list_users')
    response_iterator = paginator.paginate(
        UserPoolId=user_pool_id,
        # 这里可以添加你的过滤条件,比如AttributesToGet等
    )
    
    all_users = []
    for response in response_iterator:
        all_users.extend(response['Users'])
    return all_users

2. 对全量用户数据进行本地排序

根据UI展示需求,选择对应的字段排序,比如按用户名、创建时间或自定义属性排序:

示例1:按用户名升序排序

user_pool_id = 'your-user-pool-id'
all_users = get_all_users(user_pool_id)

# 按Username升序排序
sorted_users = sorted(all_users, key=lambda x: x['Username'])

示例2:按创建时间降序排序(最新用户在前)

# 按UserCreateDate降序排序
sorted_users = sorted(all_users, key=lambda x: x['UserCreateDate'], reverse=True)

示例3:按自定义属性排序(比如邮箱)

如果用户有自定义属性(如email),可从Attributes列表提取后排序:

def get_user_attribute(user, attr_name):
    for attr in user['Attributes']:
        if attr['Name'] == attr_name:
            return attr['Value']
    return ''

# 按邮箱升序排序
sorted_users = sorted(all_users, key=lambda x: get_user_attribute(x, 'email'))

3. 注意事项

  • 如果用户池用户量极大(如10万+),全量拉取后排序可能存在性能问题,这时可以考虑:
    • 用户创建时,将排序字段同步到带索引的外部存储(如DynamoDB),从该存储查询排序后的结果
    • 前端分页时,先对全量数据排序再截取对应页码的子集(但仍需先拉取全量,除非依赖外部存储)

内容的提问来源于stack exchange,提问作者DarkTrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:35:22