Как получить информацию обратного вызова сеанса? AWS - Cognito - JavaScript - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь получить AccessKeyID и SecretKey (в конечном итоге для программного ввода в операцию CRUD на DynamoDB с точным контролем доступа).

В любом случае, существует много вызовов API для получения учетных данных, таких как getCredentialsForIdentity (). Однако все это требует дополнительных параметров, для чего требуется больше запросов API и дополнительных параметров и т. Д.

Я нашел способ войти в систему пользователя Cognito, а затем проверить, вошли ли они в систему на странице профиля, где он может отображать адрес электронной почты и имя пользователя:

var data = { 
    UserPoolId : _config.cognito.userPoolId,
            ClientId : _config.cognito.clientId
    };
    var userPool = new AmazonCognitoIdentity.CognitoUserPool(data);
    var cognitoUser = userPool.getCurrentUser();

window.onload = function(){
        if (cognitoUser != null) {
            cognitoUser.getSession(function(err, session) {
                if (err) {
                    alert(err);
                    return;
                }

            console.log('session validity: ' + session.isValid());
            console.log(session.Credentials.AccessKeyId); //<--THIS DOESNT WORK

    cognitoUser.getUserAttributes(function(err, result) {
        if (err) {
            console.log(err);
            return;
            }
        console.log(result);

            document.getElementById("email_value").innerHTML = result[2].getValue();    
            document.getElementById("username").innerHTML = cognitoUser.getUsername();  
    });                 
      });
    }
  }

console.log(session.Credentials.AccessKeyId); представляется неверным запросом. Я предполагаю, что в session есть хорошая информация о обратном вызове, например AccessKeyID и SecretKey, и это то, что я ищу.

1 Ответ

0 голосов
/ 07 июня 2019

session.Credentials.AccessKeyId не будет работать, поскольку выходные данные сеанса:

e {idToken: t, refreshToken: e, accessToken: t, clockDrift: 0}

, тогда как AWS.config.credentials выводит:

enter image description here

Таким образом, ваш код будет:

var data = { 
    UserPoolId : _config.cognito.userPoolId,
    ClientId : _config.cognito.clientId
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(data);
var cognitoUser = userPool.getCurrentUser();

window.onload = function(){
        if (cognitoUser != null) {
            cognitoUser.getSession(function(err, session) {
                if (err) {
                    alert(err);
                    return;
                }
            console.log('session validity: ' + session.isValid());
            AWS.config.credentials = new AWS.CognitoIdentityCredentials({
                 IdentityPoolId: _config.cognito.IdentityPoolId
            });
            AWS.config.credentials.get(function(err) {
                 console.log(AWS.config.credentials); // * see above what your response will be
                 console.log(AWS.config.credentials.accessKeyId);
                 console.log(AWS.config.credentials.secretAccessKey);
      });
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...