0

Ich versuche, die ListUsers-Funktion für AWS Cognito in Angular 2 zu verwenden. Jedes Mal, wenn die Funktion aufgerufen wird, erhalte ich den Fehler, dass listUsers keine Funktion ist.Cognito ListUsers Funktion in Angular 2

Ich verwende den AWS Cognito Quickstart für Angular 2 (https://github.com/awslabs/aws-cognito-angular2-quickstart) Beispiel Ich füge die cognito.service.ts Datei hinzu, um zu versuchen, die listUsers Funktionalität zu integrieren.

Die Dokumentation für den Javascript-SDK für Cognito (http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#listUsers-property) sagt, die Funktion wie die folgenden nennen:

var params = { 
    UserPoolId: 'STRING_VALUE', /* required */ 
    AttributesToGet: [ 
    'STRING_VALUE', 
    /* more items */ 
    ], 
    Filter: 'STRING_VALUE', 
    Limit: 0, 
    PaginationToken: 'STRING_VALUE' 
}; 
cognitoidentityserviceprovider.listUsers(params, function(err, data) { 
    if (err) console.log(err, err.stack); // an error occurred 
    else  console.log(data);   // successful response 
}); 

ich die Listusers Funktion in cognito.service.ts wie folgt zu verwenden versucht hat:

@Injectable() 
export class CognitoUtil { 

    public static _REGION = environment.region; 
    public static _IDENTITY_POOL_ID = environment.identityPoolId; 
    public static _USER_POOL_ID = environment.userPoolId; 
    public static _CLIENT_ID = environment.clientId; 

    public static _POOL_DATA = { 
     UserPoolId: CognitoUtil._USER_POOL_ID, 
     ClientId: CognitoUtil._CLIENT_ID 
    }; 

    public static getAwsCognito(): any { 
     return AWSCognito; 
    } 

    getUserPool() { 
     return new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(CognitoUtil._POOL_DATA); 
    } 

    getCurrentUser() { 
     return this.getUserPool().getCurrentUser(); 
    } 

    getList(myparams){ 
     var params = { 
      UserPoolId: environment.userPoolId, /* required */ 
      AttributesToGet: [], 
      Filter: "", 
      Limit: 10 
     }; 
     var cognito = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(CognitoUtil._POOL_DATA); 
      cognito.listUsers(params, function(err, data) { 
      if (err) console.log(err, err.stack);// an error occurred 
      else return data;// successful response 
     }); 
    } 

    getCognitoIdentity(): string { 
     return AWS.config.credentials.identityId; 
    } 

    getAccessToken(callback: Callback): void { 
     if (callback == null) { 
      throw("CognitoUtil: callback in getAccessToken is null...returning"); 
     } 
     if (this.getCurrentUser() != null) 
      this.getCurrentUser().getSession(function (err, session) { 
       if (err) { 
        console.log("CognitoUtil: Can't set the credentials:" + err); 
        callback.callbackWithParam(null); 
       } 
       else { 
        if (session.isValid()) { 
        callback.callbackWithParam(session.getAccessToken().getJwtToken()); 
        } 
       } 
      }); 
     else 
      callback.callbackWithParam(null); 
    } 

    getIdToken(callback: Callback): void { 
     if (callback == null) { 
      throw("CognitoUtil: callback in getIdToken is null...returning"); 
     } 
     if (this.getCurrentUser() != null) 
      this.getCurrentUser().getSession(function (err, session) { 
       if (err) { 
        console.log("CognitoUtil: Can't set the credentials:" + err); 
        callback.callbackWithParam(null); 
       } 
       else { 
        if (session.isValid()) { 
        callback.callbackWithParam(session.getIdToken().getJwtToken()); 
        } else { 
         console.log("CognitoUtil: Got the id token, but the session isn't valid"); 
        } 
       } 
      }); 
     else 
      callback.callbackWithParam(null); 
    } 

    getRefreshToken(callback: Callback): void { 
     if (callback == null) { 
      throw("CognitoUtil: callback in getRefreshToken is null...returning"); 
     } 
     if (this.getCurrentUser() != null) 
      this.getCurrentUser().getSession(function (err, session) { 
       if (err) { 
        console.log("CognitoUtil: Can't set the credentials:" + err); 
        callback.callbackWithParam(null); 
       } 

       else { 
        if (session.isValid()) { 
         callback.callbackWithParam(session.getRefreshToken()); 
        } 
       } 
      }); 
     else 
      callback.callbackWithParam(null); 
    } 

    refresh(): void { 
     this.getCurrentUser().getSession(function (err, session) { 
      if (err) { 
       console.log("CognitoUtil: Can't set the credentials:" + err); 
      } 

      else { 
       if (session.isValid()) { 
        console.log("CognitoUtil: refreshed successfully"); 
       } else { 
        console.log("CognitoUtil: refreshed but session is still not valid"); 
       } 
      } 
     }); 
    } 
} 

Dies ist, wie ich die getList nenne (params) in der Komponente:

constructor(public cognitoUtil: CognitoUtil){} 
viewUsers(){ 
    console.log(this.cognitoUtil.getList(this.param)); 
} 

Ich habe mehrere Male verschiedene Dinge ausprobiert, um das zum Laufen zu bringen und ich kann es nicht funktionieren lassen. Ich habe ListUsers anstelle von listUsers versucht, und ich habe versucht, getUserPool() aufzurufen, anstatt AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool (CognitoUtil._POOL_DATA) zu verwenden.


aktualisieren

Ich habe AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool zu AWS.CognitoIdentityServiceProvider wie vorgeschlagen geändert. Ich erhalte jetzt den Fehler:

ConfigError: Missing region in config 
Stack trace: 
_xamzrequire<[33]</n.EventListeners.Core</<@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:11200 
_xamzrequire<[58]</n.SequentialExecutor<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21879 
[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21745 
_xamzrequire<[33]</n.EventListeners.Core</</<@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:11061 
[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:5:24062 
_xamzrequire<[20]</n.Config<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:5:24648 
_xamzrequire<[33]</n.EventListeners.Core</<@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:10913 
_xamzrequire<[58]</n.SequentialExecutor<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21850 
_xamzrequire<[58]</n.SequentialExecutor<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21585 
_xamzrequire<[54]</</n.Request<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:9935 
_xamzrequire<[54]</</c.setupStates/[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:5785 
_xamzrequire<[82]</[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:1187 
_xamzrequire<[54]</</n.Request<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:7345 
_xamzrequire<[54]</</n.Request<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:7243 
_xamzrequire<[59]</n.Service<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:2:27369 
_xamzrequire<[59]</<.defineMethods/</t.prototype[e]@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:2:30572 
[email protected]://localhost:3000/main.bundle.js:436:10 
[email protected]://localhost:3000/main.bundle.js:1435:22 
anonymous/[email protected]rganizationsViewComponent.ngfactory.js:1991:15 
[2]/</</DebugAppView</DebugAppView.prototype.eventHandler/<@http://localhost:3000/vendor.bundle.js:9712:29 
decoratePreventDefault/<@http://localhost:3000/vendor.bundle.js:11832:41 
[3]/</</DomEventsPlugin</DomEventsPlugin.prototype.addEventListener/outsideHandler/<@http://localhost:3000/vendor.bundle.js:11945:116 
[email protected]://localhost:3000/polyfills.bundle.js:14768:18 
NgZoneImpl/this.inner<[email protected]://localhost:3000/vendor.bundle.js:6256:33 
[email protected]://localhost:3000/polyfills.bundle.js:14767:18 
[email protected]://localhost:3000/polyfills.bundle.js:14664:29 
[2]/</</NgZoneImpl</[email protected]://localhost:3000/vendor.bundle.js:6285:72 
[2]/</</NgZone</[email protected]://localhost:3000/vendor.bundle.js:6518:63 
[3]/</</DomEventsPlugin</DomEventsPlugin.prototype.addEventListener/[email protected]://localhost:3000/vendor.bundle.js:11945:79 
[email protected]://localhost:3000/polyfills.bundle.js:14801:22 
[email protected]://localhost:3000/polyfills.bundle.js:14690:29 
ZoneTask/[email protected]://localhost:3000/polyfills.bundle.js:14871:29 
_xamzrequire<[33]</n.EventListeners.Core</<@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:11200 
_xamzrequire<[58]</n.SequentialExecutor<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21879 
[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21745 
_xamzrequire<[33]</n.EventListeners.Core</</<@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:11061 
[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:5:24062 
_xamzrequire<[20]</n.Config<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:5:24648 
_xamzrequire<[33]</n.EventListeners.Core</<@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:10913 
_xamzrequire<[58]</n.SequentialExecutor<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21850 
_xamzrequire<[58]</n.SequentialExecutor<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21585 
_xamzrequire<[54]</</n.Request<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:9935 
_xamzrequire<[54]</</c.setupStates/[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:5785 
_xamzrequire<[82]</[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:1187 
_xamzrequire<[54]</</n.Request<.runTo[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:7345 
_xamzrequire<[54]</</n.Request<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:7243 
_xamzrequire<[59]</n.Service<[email protected]://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:2:27369 
_xamzrequire<[59]</<.defineMethods/</t.prototype[e]@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:2:30572 
[email protected]://localhost:3000/main.bundle.js:436:10 
[email protected]://localhost:3000/main.bundle.js:1435:22 
anonymous/[email protected]rganizationsViewComponent.ngfactory.js:1991:15 
[2]/</</DebugAppView</DebugAppView.prototype.eventHandler/<@http://localhost:3000/vendor.bundle.js:9712:29 
decoratePreventDefault/<@http://localhost:3000/vendor.bundle.js:11832:41 
[3]/</</DomEventsPlugin</DomEventsPlugin.prototype.addEventListener/outsideHandler/<@http://localhost:3000/vendor.bundle.js:11945:116 
[email protected]://localhost:3000/polyfills.bundle.js:14768:18 
NgZoneImpl/this.inner<[email protected]://localhost:3000/vendor.bundle.js:6256:33 
[email protected]://localhost:3000/polyfills.bundle.js:14767:18 
[email protected]://localhost:3000/polyfills.bundle.js:14664:29 
[2]/</</NgZoneImpl</[email protected]://localhost:3000/vendor.bundle.js:6285:72 
[2]/</</NgZone</[email protected]://localhost:3000/vendor.bundle.js:6518:63 
[3]/</</DomEventsPlugin</DomEventsPlugin.prototype.addEventListener/[email protected]://localhost:3000/vendor.bundle.js:11945:79 
[email protected]://localhost:3000/polyfills.bundle.js:14801:22 
[email protected]://localhost:3000/polyfills.bundle.js:14690:29 
ZoneTask/[email protected]://localhost:3000/polyfills.bundle.js:14871:29 

Antwort

1

Die Operation listUsers wird über das AWS-Haupt-SDK bereitgestellt und ist eine authentifizierte Operation, was bedeutet, dass AWS-Anmeldeinformationen zum Ausführen benötigt werden. Einige Code in Knoten:

var aws = require('aws-sdk'); 
aws.config.update({accessKeyId: 'akid', secretAccessKey: 'secret'}); 

var CognitoIdentityServiceProvider = aws.CognitoIdentityServiceProvider; 
var client = new CognitoIdentityServiceProvider({ apiVersion: '2016-04-19', region: 'us-east-1' }); 

//now you can call listUsers on the client object  

Hinweis, dass es möglicherweise verschiedene Möglichkeiten, in denen Sie die AWS-Anmeldeinformationen konfigurieren können den Vorgang nennen. Sie benötigen Anmeldeinformationen, da dies eine authentifizierte Operation ist. CreateUserPool ist ähnlich, Sie müssen nur die entsprechenden Parameter als JSON im Aufruf übergeben.

+0

Meine App ist eine Angular 2 Web App und ich bin mir nicht sicher, ob der SecretAccesKey über Client/Frontend verteilt werden soll. Ich verwende keinen Knoten als mein Backend, ich benutze Java. Kann dieser Aufruf direkt im Frontend erfolgen, nicht mit dem secretAccessKey, sondern mit Token? – JSONGagnon

+0

Dieser Aufruf kann nicht mit Tokens erfolgen. Wenn Sie Benutzer authentifizieren und Token abrufen, können Sie mit Cognito Federated Identities temporäre AWS-Anmeldeinformationen abrufen, die zum Aufrufen von listUsers mit dem AWS-Haupt-SDK verwendet werden können (Anwendungsfall 17 im folgenden Repo) https: // github.com/aws/amazon-cognito-identity-js –

+0

Vielen Dank für Ihre Hilfe. – JSONGagnon

0

Sie rufen auf Listusers ein Objekt vom Typ: AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool, müssen Sie es auf ein Objekt vom Typ nennen: AWS.CognitoIdentityServiceProviderCognitoUserPool hat keine solche Methode.

+0

ich die 'AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool' zu' AWS.CognitoIdentityServiceProvider' geändert und erhalte ich nun den Fehler 'ConfigError: Fehlende Region in Config Stapelüberwachung: _xamzrequire <[33] JSONGagnon

Verwandte Themen