erg*_*sto 3 amazon-web-services amazon-cognito aws-sdk-js
因此,我需要在客户端的自定义管理屏幕中显示用户列表及其各个组。我正在 Lambda 函数中返回结果AWS.CognitoIdentityServiceProvider.listUsers,并且可以很好地列出用户,但我不确定为每个用户获取组并将其添加到响应中的最佳方法。
对我来说,他们没有提供类似 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)
})
}
});
})
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8654 次 |
| 最近记录: |