Cognito ListUsers永远持续

时间:2018-10-18 20:37:54

标签: c# amazon-web-services amazon-cognito

嘿,我写了一些代码来下载Cognito用户池中的所有用户,但是它似乎永远存在。我很确定我正确使用了分页令牌。 Cognito的UI估计我有大约10,000个用户,但是我在循环中添加了一个断点分钟,而我的List有50,000多个,这没有任何意义。

帮助非常感谢!

        using (AmazonCognitoIdentityProviderClient provider = AuthorizedClient())
        {
            try
            {
                List<UserType> users = new List<UserType>();
                bool continueListing = true;

                ListUsersResponse response = provider.ListUsers(
                    new ListUsersRequest
                    {
                        UserPoolId = UserPoolId,
                        Limit = 60,
                        AttributesToGet = new List<string>
                        {
                            "email"
                        }
                    });

                users.AddRange(response.Users);
                string paginationToken = response.PaginationToken;
                while (continueListing)
                {
                    response = provider.ListUsers(
                        new ListUsersRequest
                        {
                            UserPoolId = UserPoolId,
                            Limit = 60,
                            PaginationToken = paginationToken,
                            AttributesToGet = new List<string>
                            {
                                "email"
                            }
                        });

                    if (response.Users.Count < 60)
                    {
                        continueListing = false;
                    }
                    else
                    {
                        paginationToken = response.PaginationToken;
                        users.AddRange(response.Users);
                    }
                }

                return users;
            }
            catch (Exception)
            {
                //_session.NotifyUser(Notification.GeneralError());
                //_logger.LogError(e.Message);
            }

            return null;
        }

2 个答案:

答案 0 :(得分:2)

请勿从cognito列出您的用户! 您将开始达到其api限制。 为用户轮询数据库,您将拥有更多控制权。

答案 1 :(得分:0)

我最终使用费率门将其启用。我认为,当您的垃圾邮件请求在HTTP领域变得混乱时,您就会收到有趣的响应。无论如何,如果每秒超过5个ListUsers API调用,您将获得RateExceedException,无论如何它都将不起作用,因此无论如何我都需要一个速率门。

这是我使用的“ RateGate”,效果非常好。我只是将其设置为将我的循环限制为每秒4次迭代(小于最大值)。

https://github.com/Danthar/RateLimiting