AdminListGroupsForUser возвращает пользователя не существует - PullRequest
0 голосов
/ 20 ноября 2018

Мое приложение - это процесс аутентификации с 2 сервисами, одним из которых является AWS Cognito.Когда пользователь аутентифицируется (как и токены JWT, которые предоставляет Cognito) , я пытаюсь перечислить группы для этого пользователя с помощью вызова API AdminListGroupsForUser.Я получал 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
        });
    });
});

listGroupsForUserParams и getUserParams содержат одинаковую информацию:

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

Я не понимаю, как это имеет смысл, что первый вызов не может найти пользователя в пуле, а второй может?

См. (для справок) :

1 Ответ

0 голосов
/ 06 февраля 2019

У меня была такая же проблема, и по какой-то причине функция 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 */
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...