【问题标题】:AWS Cognito: Methods to Get a List of users?AWS Cognito:获取用户列表的方法?
【发布时间】: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 管理控制台中所示) 并且总是,由于另一种方法,我的应用程序能够编辑一些信息作为用户的“组”。

谁能告诉我这是否可行?

【问题讨论】:

    标签: angular amazon-web-services typescript aws-cognito


    【解决方案1】:

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

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

    2. 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();

    【讨论】:

      猜你喜欢
      • 2022-11-22
      • 1970-01-01
      • 2021-10-15
      • 2017-07-25
      • 1970-01-01
      • 2020-06-06
      • 2017-10-03
      • 2017-07-10
      • 2019-10-18
      相关资源
      最近更新 更多