AWS cognito: getCredentials не работает - PullRequest
0 голосов
/ 02 июня 2018

Я нахожусь в процессе обучения использованию AWS Cognito.Я настроил пул пользователей и пул удостоверений.

Код (упрощенно):

cognitoUser.authenticateUser(authenticationDetails, {
      onSuccess: (result) => {
        let cognitoGetUser = userPool.getCurrentUser();
        if (cognitoGetUser != null) {
          cognitoGetUser.getSession((err, result) => {
            if (result) {
              console.log ("Authenticated to Cognito User and Identity Pools!");
              let token = result.getIdToken().getJwtToken();
              let cognitoParams = {
                IdentityPoolId: this.identityPool,
                Logins: {}
              };
              cognitoParams.Logins["cognito-idp.eu-west-1.amazonaws.com/"+this.poolData.UserPoolId] = token;
              AWS.config.credentials = new AWS.CognitoIdentityCredentials(cognitoParams);

              AWS.config.getCredentials(() => {
                  console.log(AWS.config.credentials.accessKeyId)
                  console.log(AWS.config.credentials.secretAccessKey)
                  console.log(AWS.config.credentials.sessionToken)  
              }
            }
          }
        }
      },
      onFailure: function(err) {
        console.log('error');
        console.log(err)
      }
    }
  }

Большая часть кода работает, как и ожидалось: authenticateUser запускает onSuccess, и яможно увидеть jwt токен ect

Проблема: Я не могу заставить AWS.config.getCredentials работать.Он выполнен без ошибок, но accessKeyId, secretAccessKey и SessionToken - все undefined.

Есть предложения, что я делаю не так?

1 Ответ

0 голосов
/ 03 июня 2018

Я не могу заставить работать AWS.config.getCredentials. Выполнено без ошибок , но

Это может быть ошибочным предположением.В вашем сокращенном коде отсутствует пара закрывающих скобок, но он работал нормально для меня без каких-либо значительных корректировок.


При вызове getCredentials о любых ошибках "молча" сообщается через объект error.Я думаю, что вы где-нибудь увидите ответ 400 (вкладка сети или консоль или оба), но getCredentials() на самом деле не сообщает об ошибках видимым образом.

Чтобы увидеть, что происходит не так, вы должны добавить параметр к обратному вызову, который вы передаете getCredentials():

AWS.config.getCredentials((err) => {
    if (err) {
        console.log(err);
    } else {
        console.log(AWS.config.credentials.accessKeyId)
        console.log(AWS.config.credentials.secretAccessKey)
        console.log(AWS.config.credentials.sessionToken)
    }
});

Для справки один часто встречающийся объект ошибки выглядит так:этот.Обратите внимание, что полезное сообщение находится в originalError.message:

{
    "message": "Could not load credentials from CognitoIdentityCredentials",
    "code": "CredentialsError",
    "time": "2018-06-03T15:19:02.078Z",
    "requestId": "71b03b4a-6741-11e8-98af-b70a114474f8",
    "statusCode": 400,
    "retryable": false,
    "retryDelay": 94.28032122526344,
    "originalError": {
        "message": "Invalid login token. Issuer doesn't match providerName",
        "code": "NotAuthorizedException",
        "time": "2018-06-03T15:19:02.078Z",
        "requestId": "71b03b4a-6741-11e8-98af-b70a114474f8",
        "statusCode": 400,
        "retryable": false,
        "retryDelay": 94.28032122526344
    }
}

Соответствующий 400 на вкладке Сеть содержит этот ответ:

{"__type":"NotAuthorizedException","message":"Invalid login token. Issuer doesn't match providerName"}
...