0

AWS CognitoのListUsers関数をAngular 2で使用しようとしています。関数が呼び出されるたびに、listUsersが関数ではないことを示すErrorが返されます。Cognito ListUsersはAngular 2で機能します

AWG Cognito QuickstartをAngular 2(https://github.com/awslabs/aws-cognito-angular2-quickstart)に使用しています。例cognito.service.tsファイルに追加してlistUsers機能を組み込もうとしています。私はこのようなcognito.service.tsでlistUsers機能を使用しようとしました

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 
}); 

Cognito用のJavascript SDKのドキュメント(http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#listUsers-property)は、次のような関数を呼び出すと言います

@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"); 
       } 
      } 
     }); 
    } 
} 

これは私がコンポーネントにGETLIST(のparams)を呼び出しています方法です:

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

私はこの作業をするために何度も違ったことを試みましたが、それを動作させることはできません。 listUsersの代わりにListUsersを試してみましたが、AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(CognitoUtil._POOL_DATA)を使用する代わりにgetUserPool()を呼び出そうとしました。


更新

提案のように私はAWS.CognitoIdentityServiceProviderAWSCognito.CognitoIdentityServiceProvider.CognitoUserPoolを変更しました。私は今、エラーが発生します:あなたはタイプのオブジェクトにlistUsersを呼び出している

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<[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 

答えて

1

listUsers操作はメインのAWS SDKを介して公開されています。これは認証された操作であり、AWS資格情報が必要です。ノード内の一部のコード:

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  

操作を呼び出すためにAWS資格情報を設定できるさまざまな方法があります。これは認証された操作であるため、資格情報が必要です。 CreateUserPoolは似ていますが、呼び出しで適切なパラメータをJSONとして渡すだけで済みます。

+0

私のアプリはAngular 2 Webアプリです。secretAccesKeyをクライアント側/フロントエンド経由で配布するかどうかはわかりません。私はバックエンドとしてノードを使用していない、私はJavaを使用しています。この呼び出しはsecretAccessKeyではなくトークンでフロントエンドで直接行うことができますか? – JSONGagnon

+0

この呼び出しはトークンでは実行できません。ユーザーを認証してトークンを取得する場合は、CognitoのフェデレーションIDを使用して、メインのAWS SDK(以下のレポのケース17)https:// githubを使用してlistUserを呼び出すために使用できる一時的なAWS認証情報を取得できます。com/aws/amazon-cognito-identity-js –

+0

ありがとうございました。 – JSONGagnon

0

AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool、あなたはタイプのオブジェクトにそれを呼び出す必要があります。AWS.CognitoIdentityServiceProviderCognitoUserPoolは、そのようなメソッドを持っていません。

+0

私はAWS.CognitoIdentityServiceProvider' 'に' AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool'を変更し、私は今、エラー 'ConfigError受け付けております。config スタックトレースに欠損領域を: _xamzrequireを<[33] JSONGagnon

関連する問題