Список пользователей и их групп из AWS.CognitoIdentityServiceProvider.listUsers в функции NodeJS Lambda?

Поэтому мне нужно отобразить список пользователей, а также их отдельные группы на настраиваемом экране администратора для клиента. Я возвращаю результаты AWS.CognitoIdentityServiceProvider.listUsers в функции Lambda, и это список пользователей в порядке, но я не уверен, как лучше всего получить группы для каждого пользователя и добавить их в ответ.

Мне кажется немного удивительным, что они не предоставляют метод listUsers, который лично включает эту информацию, поскольку кажется, что это будет обычным вариантом использования. Кто-нибудь раньше занимался этой проблемой? У меня есть решение, которое работает, но кажется хакерским и, вероятно, не очень производительным, поэтому я ищу что-то более эффективное.

Кажется, мои варианты либо выбирают каждую группу в пуле пользователей и вызывают AWS.CognitoIdentityServiceProvider.listUsersInGroup для каждой из них, затем перебирают всех пользователей из listUsers и проверяют, входят ли они в какую-либо из этих групп, либо перебирают каждого пользователя в ответе от listUsers и вызывая AWS.CognitoIdentityServiceProvider.adminListGroupsForUser для каждого из них. Это мои единственные варианты? Первый вариант кажется несколько более эффективным, так как групп будет меньше, чем пользователей, поэтому это приведет к меньшему количеству вызовов API, но кажется, что это все еще безумно неэффективно.


person ergusto    schedule 30.11.2019    source источник


Ответы (1)


Согласно документации, я бы выбрал следующее решение:

  1. Количество групп определенно будет меньше, чем пользователей. Таким образом, лучше использовать метод: AWS.CognitoIdentityServiceProvider.listGroups
  2. Прокрутите список групп и выберите из него пользователей.

Пример кода:

const AWS = require('aws-sdk')

var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider({apiVersion: '2016-04-18'});

const USER_POOL_ID = 'region_XXXXXXXXX'

var params = {
    UserPoolId: USER_POOL_ID, /* required */
};
cognitoidentityserviceprovider.listGroups(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     {
        console.log('Groups list:')
        data.Groups.map(groups => {
            console.log(groups.GroupName)
        })

        data.Groups.map( groupEntity => {
            var params = {
                GroupName: groupEntity.GroupName, /* required */
                UserPoolId: USER_POOL_ID, /* required */
            };
            cognitoidentityserviceprovider.listUsersInGroup(params, function(err1, data1) {
                if (err1) console.log(err1, err1.stack); // an error occurred
                else {
                    console.log(`${groupEntity.GroupName} has ${data1.Users.length} users`);

                    data1.Users.map(userEntity => {
                        console.log(userEntity.Username)
                    })
                }
            });

        })
    }
});
person elbik    schedule 03.12.2019