AWS Cognito:获取用户列表的方法?

Posted

技术标签:

【中文标题】AWS Cognito:获取用户列表的方法?【英文标题】:AWS Cognito: Methods to Get a List of users? 【发布时间】:2018-02-27 02:01:31 【问题描述】:

我正在使用 Angular 4(使用 TypeScript 语言)前端开发 Web 应用程序,并使用 AWS 服务后端大小。 此应用程序只能由一组用户访问(每个用户都有自己的邮件和密码)。这组用户在 AWS Cognito - 用户池中定义。 我怎样才能拥有这些用户的完整列表及其属性 在前台看到她?以及如何仅在前端更改它们的属性?

我看到了 AWS Cognito (https://github.com/aws/amazon-cognito-identity-js) 的 javascript 方法,但没有找到任何我想做的事情。

我想使用某种方法来显示完整的用户列表及其属性(如 Cognito 的 AWS 管理控制台中所示) 并且总是,由于另一种方法,我的应用程序能够编辑一些信息作为用户的“组”。

谁能告诉我这是否可行?

【问题讨论】:

【参考方案1】:

迟到的回应,但对于那些可能需要它的人:

    创建新的 IAM 策略,允许 Cognito 列表用户

    JS中的代码

    const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider(
         apiVersion: '2016-04-18',
         region: "eu-central-1",
         credentials: Auth.essentialCredentials(credentials)
       );
       var params = 
         UserPoolId: environment.amplify.Auth.userPoolId, /* required */
         AttributesToGet: [
           "email",
         ],
         Limit: 0
       ;
       cognitoidentityserviceprovider.listUsers(params, function (err, data) 
         if (err) console.log(err, err.stack); // an error occurred
         else console.log(data);           // successful response
       );
     );
    

【讨论】:

嗨,我收到此错误Validation error detected: Value '100' at 'limit' failed to satisfy constraint: Member must have value less than or equal to 60。如果我尝试增加限制,我会收到上述错误消息。 @prakashtank 根据文档,docs.aws.amazon.com/cognito/latest/developerguide/limits.html,单个 List/Lookup API 调用的最大结果数为 60 @Zecide :是的,你是对的。我得到了解决方案。我需要通过 paginationToken 来获取下 60 个用户,依此类推...【参考方案2】:

此函数将列出用户,只需使用 aws 密钥和密钥、用户池区域和 id 并调用函数 getUsers()。 您可以在参数中使用过滤器来执行更具体的请求。 https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#listUsers-property

var AWS = require('aws-sdk');

exports.getUsers= () => 
var params = 
  UserPoolId: USER_POOL_ID
  AttributesToGet: [
    'ATTRIBUTE_NAME',
  ],
;

return new Promise((resolve, reject) => 
    AWS.config.update( region: USER_POOL_REGION, 'accessKeyId': AWS_ACCESS_KEY_ID, 'secretAccessKey': AWS_SECRET_KEY );
    var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
    cognitoidentityserviceprovider.listUsers(params, (err, data) => 
        if (err) 
            console.log(err);
            reject(err)
        
        else 
            console.log("data", data);
            resolve(data)
        
    )
);

【讨论】:

如果我错了,请纠正我,但是此方法是否以分页格式返回列表?例如,如果您的 cognito 池中有超过 60 个用户,您必须调用 listUsers 方法,直到在响应中没有收到任何分页标记? 我几乎一年没有使用它,但我几乎可以肯定它会返回整个用户列表。我知道您可以在 params 对象中使用过滤器,但它们不包括分页。事情可能已经改变,但去年就是这样 @PedroSilva 不,它不返回整个列表(至少现在是这样),它返回一个 PaginationToken 参数。 抱歉,他们可能更改了代码。下周末我会尝试更新代码,因为我已经 2 年没有使用 sdk了【参考方案3】:

查看 Cognito 身份服务提供商 SDK。

SDK Link

想要的函数是listUsers();

【讨论】:

以上是关于AWS Cognito:获取用户列表的方法?的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以在 AWS Lambda 中获取 Cognito 用户名?

是否可以在没有 Cognito 用户池的情况下使用 AWS Amplify Analytics?

aws cognito用户获取id令牌android

我无法获取用户的 AWS Cognito 凭证 (swiftUI)

AWS + Serverless - 如何获取 cognito 用户池生成的密钥

如何从 c# 中的 aws cognito 获取用户属性