【问题标题】:AdminListGroupsForUser returns user does not existAdminListGroupsForUser 返回用户不存在
【发布时间】:2019-04-22 22:21:47
【问题描述】:

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

我尝试了以下方法:

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
        });
    });
});

listGroupsForUserParamsgetUserParams 包含相同的信息,即:

{
    UserPoolId: "...",
    Username: "test@example.com"     // I use email as Username
}

我不明白前一个调用无法在池中找到用户但后一个调用如何?

(参考)

【问题讨论】:

  • 您的 cognitoClient 的区域设置是否正确?
  • @Deepthi 是的,该区域是正确的。我想如果不是这样,即使是第二次调用 adminGetUser 也会失败

标签: javascript aws-sdk amazon-cognito


【解决方案1】:

我遇到了同样的问题,由于某种原因,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 */
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    相关资源
    最近更新 更多