prakash tank
prakash tank

Reputation: 1267

AWS cognito users list : lambda

I am working on one node application which is using AWS. now i want to get all cognito users but as per doc it returns first 60 users but i want all users. can you assist me with this? In doc, they mentioned that pass PaginationToken (string) . but i don't know what to pass in it.

Here what i have done so far :

exports.handler = (event, context, callback) => {
        const requestBody = JSON.parse(event.body);
        var params = {
                "UserPoolId": "****************",
                "Limit": 60,
                "PaginationToken" : (what to pass here????),
        }
        const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
        cognitoidentityserviceprovider.listUsers(params, (err, data) => {
            if (err) {
                callback(null, { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" }, body: JSON.stringify({ statusCode: 405, data: err }) });
            } else {
                console.log(data);
                let userdata = [];
                for(let i=0; i<data.Users.length;i++){
                    // console.log(data.Users[i].Attributes);
                    userdata.push(getAttributes(data.Users[i].Attributes));
                }
                 callback(null, { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" }, body: JSON.stringify({ statusCode: 200, data: userdata }) });

            }
        });
};

function getAttributes(attributes){
    let jsonObj = {};
    attributes.forEach((obj) => {
        jsonObj[obj.Name] = obj.Value;
    });
    return jsonObj;
}

Upvotes: 1

Views: 886

Answers (1)

Andy Gaskell
Andy Gaskell

Reputation: 31761

In your response you should see a property called PaginationToken. If you make the same call but include this value in your params you will receive the next 60 users. Here's the concept:

cognitoidentityserviceprovider.listUsers(params, (err, data) => {
    // data.Users is the first 60 users
    params.PaginationToken = data.PaginationToken;
    cognitoidentityserviceprovider.listUsers(params, (err, data) => {
        // data.Users is the next 60 users
    });
});

You might want to consider switching to promises and async/await if your environment supports it. That would make this code easier to read and write.

const data = await cognitoidentityserviceprovider.listUsers(params).promise();
params.PaginationToken = data.PaginationToken;
const data2 = await cognitoidentityserviceprovider.listUsers(params).promise();

Upvotes: 2

Related Questions