因此,我需要在客户端的自定义管理屏幕中显示用户列表及其各个组。我正在返回结果AWS.CognitoIdentityServiceProvider.listUsers
在 Lambda 函数中,这可以很好地列出用户,但我不确定为每个用户获取组并将其添加到响应中的最佳方法。
对我来说,他们没有提供类似 listUsers 的方法来包含该信息,就个人而言,这似乎有点令人惊讶,因为这似乎是一个常见的用例。以前有人解决过这个问题吗?我有一个有效的解决方案,但它看起来很老套,而且可能性能不高,所以我正在寻找更有效的解决方案。
看来我的选择是要么获取用户池中的每个组并调用AWS.CognitoIdentityServiceProvider.listUsersInGroup
对于每个人,然后循环遍历所有用户listUsers
并检查他们是否属于这些组中的任何一个,或者在响应中循环遍历每个用户listUsers
并打电话AWS.CognitoIdentityServiceProvider.adminListGroupsForUser
对于他们每个人来说。这些是我唯一的选择吗?第一个选项似乎效率稍高,因为组数少于用户数,因此 API 调用也会减少,但看起来这仍然非常低效。
根据文档,我将采用以下解决方案:
- 组的数量肯定会低于用户的数量。因此更好的使用方法是:
AWS.CognitoIdentityServiceProvider.listGroups
- 循环遍历组列表并从中检索用户。
代码示例:
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)
})
}
});
})
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)