如果用户登录,则我正在检查用户是否具有IoT所需的策略,如果没有,请附加它。

如果我是第一次登录,这可以正常工作。

现在,当我注销并尝试以其他用户身份登录时,由于某种原因,凭据丢失,并且当我刷新页面时,它又可以工作了。

window.login = function() {
    var shadowsRegistered = false;

    AWSCognito.config.region = AWSConfiguration.region;
    AWSCognito.config.credentials = new AWS.CognitoIdentityCredentials({
        IdentityPoolId: AWSConfiguration.IdPoolId
    });

    var authenticationData = {
      Username : document.getElementById("benutzername").value,
      Password : document.getElementById("passwort").value
    };

    var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);

    var poolData = {
      UserPoolId : AWSConfiguration.UserPoolId,
      ClientId :   AWSConfiguration.ClientAppId
    };

    var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);

    var userData = {
      Username : document.getElementById("benutzername").value,
      Pool : userPool
    };

    var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);

    cognitoUser.authenticateUser(authenticationDetails, {
      onSuccess: function (result) {
        AWS.config.region = AWSConfiguration.region;

        var auth_params = {
          IdentityPoolId: AWSConfiguration.IdPoolId,
          Logins : {
            'cognito-idp.eu-central-1.amazonaws.com/eu-central-XXXX' : result.getIdToken().getJwtToken()
          }
        };

        AWS.config.credentials = new AWS.CognitoIdentityCredentials(auth_params);
        var cognitoIdentity = new AWS.CognitoIdentity();
        cognitoIdentity.getId(auth_params, function(err, data) {
          if (err) {
            cognitoId = AWS.config.credentials.identityId;
          }
          else{
            cognitoId = data.IdentityId;
          }
          var iot = new AWS.Iot();

          iot.listPrincipalPolicies({principal: cognitoId}, function(err, data) {
            if (err) {
              console.log(err, err.stack);  //ERROR on 2nd login
            }
            else{
              // not related, works on the first login..


我收到的错误:


  CredentialsError:配置中缺少凭据

最佳答案

我自己修好了。您需要清除缓存的凭据。

$('#logout').click(function() {
  currentUser = userPool.getCurrentUser();
  currentUser.signOut();
  AWS.config.credentials.clearCachedId();
  AWS.config.credentials = new AWS.CognitoIdentityCredentials({});
  location.reload();
});

07-24 18:24