AdminListGroupsForUser返回用户不存在

时间:2018-11-20 13:02:26

标签: javascript aws-sdk amazon-cognito

我的应用程序是使用2个服务进行身份验证的过程,其中一项是AWS Cognito。当用户通过身份验证(Cognito提供了JWT令牌)后,我尝试通过tsconfig.json API调用列出该用户的组。我收到了 UserNotFoundException ,这很奇怪,因为先前的调用刚刚使用相同的凭据对该用户进行了身份验证?

我做了以下实验:

AdminListGroupsForUser

router.post("/groups/list", (req, res, next) => { const { email, limit, nextToken } = req.body; const listGroupsForUserParams = getAdminListGroupsForUserParams({ email, limit, nextToken }); const getUserParams = getAdminGetUserParams(email); cognitoClient.adminListGroupsForUser(listGroupsForUserParams, (listErr, listData) => { cognitoClient.adminGetUser(getUserParams, (getErr, getData) => { console.log(listErr); // "UserNotFoundException" console.log(listData); // null console.log(getErr); // null console.log(getData); // User }); }); }); listGroupsForUserParams包含以下相同信息:

getUserParams

我不知道前者在池中找不到用户,而后者可以在池中找到用户,这有什么意义呢?

请参见(以供参考)

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,由于某种原因,adminListGroupsForUser函数不接受电子邮件作为用户名,而adminGetUser接受。 我通过使用adminGetUser检索用户数据来解决此问题。它返回用户及其所有属性。检索名称为sub的属性值,并将其用作adminListGroupsForUser调用的用户名。

类似这样的东西:

const getParams = {
    UserPoolId: "" /*put your user pool Id here*/,
    Username: "" /* email */
};

cognitoidentityserviceprovider.adminGetUser(getParams, function(err, data) {
    if (err) {
      console.log(err, err.stack); // an error occurred
      return;
    }

    var sub;
    if (data.UserAttributes && data.UserAttributes.length) {
      for (var i = 0; i < data.UserAttributes.length; ++i) {
        const attr = data.UserAttributes[i];
        if (attr.Name === 'sub') {
          console.log(attr);
          sub = attr.Value
          break;
        }
      }
    }

    if (!sub)
        return;

    const groupsParams = {
      UserPoolId: event.userPoolId,
      Username: sub
    };  
    cognitoidentityserviceprovider.adminListGroupsForUser(groupsParams, function(err, data) {
        /* Your code using groups here */
    });
});