Skip to content

Limit is not respected in CognitoIdentityProviderClient ListUsersCommand #7071

@zshzbh

Description

@zshzbh

Checkboxes for prior research

Describe the bug

CLI and JS SDK have same behavior. I have 53 users in my user pool. When I set the limit to 20, the first page contains 7 users. When I set the limit to 50, the first page contains 20 users.
Code I have -

Regression Issue

  • Select this option if this issue appears to be a regression.

SDK version number

"@aws-sdk/client-cognito-identity-provider": "^3.806.0",

Which JavaScript Runtime is this issue in?

Node.js

Details of the browser/Node.js/ReactNative version

node v20.18.0

Reproduction Steps

import {
  CognitoIdentityProviderClient,
  ListUsersCommand,
} from "@aws-sdk/client-cognito-identity-provider";

const client = new CognitoIdentityProviderClient({
  region: "us-east-1",
});
const userPoolId = "us-east-1_XmXhQUtUx";
async function listAllUsers() {
  try {
    let totalUsers = 0;
    let paginationToken = null;
    let pageCount = 0;

    while (true) {
      pageCount++;

      const params = {
        UserPoolId: userPoolId,
        Limit: 20,
      };

      if (paginationToken) {
        params.PaginationToken = paginationToken;
      }

      const command = new ListUsersCommand(params);
      const response = await client.send(command);

      const pageUserCount = response.Users?.length || 0;
      totalUsers += pageUserCount;

      console.log(`Page ${pageCount}: ${pageUserCount} users`);
      console.log(`Has more pages: ${!!response.PaginationToken}`);

      paginationToken = response.PaginationToken;

      if (!paginationToken) {
        break;
      }
    }

    console.log(`Total pages: ${pageCount}`);
    console.log(`Total users: ${totalUsers}`);
  } catch (error) {
    console.error("Error:", error.message);
  }
}

listAllUsers();

result -

Page 1: 7 users
Has more pages: true
Page 2: 9 users
Has more pages: true
Page 3: 9 users
Has more pages: true
Page 4: 7 users
Has more pages: true
Page 5: 4 users
Has more pages: true
Page 6: 9 users
Has more pages: true
Page 7: 8 users
Has more pages: false
Total pages: 7
Total users: 53

If I change the limit to 50, then I got the result -

Page 1: 20 users
Has more pages: true
Page 2: 16 users
Has more pages: true
Page 3: 17 users
Has more pages: false
Total pages: 3
Total users: 53

In CLI , it also returns 7 items when limit =20 -

~ $ aws cognito-idp list-users   --user-pool-id us-east-1_XmXhQUtUx     --query "Users[*].Attributes[?Name=='email'].Value" --limit 20
[
    [
        "[email protected]"
    ],
    [
        "[email protected]"
    ],
    [
        "[email protected]"
    ],
    [
        "[email protected]"
    ],
    [
        "[email protected]"
    ],
    [
        "[email protected]"
    ],
    [
        "[email protected]"
    ]
]
(END)

Observed Behavior

The returned users amount is not respecting the limit

Expected Behavior

The returned users amount should respect the limit

Possible Solution

Additional Information/Context

No response

Metadata

Metadata

Assignees

Labels

bugThis issue is a bug.duplicateThis issue is a duplicate.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions