Angito 2

时间:2017-05-04 03:47:41

标签: angular amazon-web-services angular2-services amazon-cognito aws-sdk-js

我正在尝试在Angular 2中使用AWS Cognito的listUsers函数。每次调用该函数时,我都会收到错误,指出listUsers不是函数。

我正在使用AWS Cognito Quickstart for Angular 2(https://github.com/awslabs/aws-cognito-angular2-quickstart)示例我将添加到cognito.service.ts文件中以尝试合并listUsers功能。

适用于Cognito的Javascript SDK(http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#listUsers-property)的文档说如下所示调用该函数:

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.service.ts中使用listUsers函数,如下所示:

@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,我尝试调用getUserPool()而不是使用AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(CognitoUtil._POOL_DATA)。

更新

我已根据建议将AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool更改为AWS.CognitoIdentityServiceProvider。我现在收到错误:

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<.callListeners@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21879
o@http://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
e@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:5:24062
_xamzrequire<[20]</n.Config<.getCredentials@http://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<.callListeners@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21850
_xamzrequire<[58]</n.SequentialExecutor<.emit@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21585
_xamzrequire<[54]</</n.Request<.emitEvent@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:9935
_xamzrequire<[54]</</c.setupStates/t@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:5785
_xamzrequire<[82]</n.prototype.runTo@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:1187
_xamzrequire<[54]</</n.Request<.runTo@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:7345
_xamzrequire<[54]</</n.Request<.send@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:7243
_xamzrequire<[59]</n.Service<.makeRequest@http://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
CognitoUtil.prototype.getList@http://localhost:3000/main.bundle.js:436:10
organizationsViewComponent.prototype.viewUsersInOrg@http://localhost:3000/main.bundle.js:1435:22
anonymous/_View_organizationsViewComponent1.prototype._handle_click_13_0@organizationsViewComponent.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
ZoneDelegate.prototype.invoke@http://localhost:3000/polyfills.bundle.js:14768:18
NgZoneImpl/this.inner<.onInvoke@http://localhost:3000/vendor.bundle.js:6256:33
ZoneDelegate.prototype.invoke@http://localhost:3000/polyfills.bundle.js:14767:18
Zone.prototype.runGuarded@http://localhost:3000/polyfills.bundle.js:14664:29
[2]/</</NgZoneImpl</NgZoneImpl.prototype.runInnerGuarded@http://localhost:3000/vendor.bundle.js:6285:72
[2]/</</NgZone</NgZone.prototype.runGuarded@http://localhost:3000/vendor.bundle.js:6518:63
[3]/</</DomEventsPlugin</DomEventsPlugin.prototype.addEventListener/outsideHandler@http://localhost:3000/vendor.bundle.js:11945:79
ZoneDelegate.prototype.invokeTask@http://localhost:3000/polyfills.bundle.js:14801:22
Zone.prototype.runTask@http://localhost:3000/polyfills.bundle.js:14690:29
ZoneTask/this.invoke@http://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<.callListeners@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21879
o@http://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
e@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:5:24062
_xamzrequire<[20]</n.Config<.getCredentials@http://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<.callListeners@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21850
_xamzrequire<[58]</n.SequentialExecutor<.emit@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:21585
_xamzrequire<[54]</</n.Request<.emitEvent@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:9935
_xamzrequire<[54]</</c.setupStates/t@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:5785
_xamzrequire<[82]</n.prototype.runTo@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:4:1187
_xamzrequire<[54]</</n.Request<.runTo@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:7345
_xamzrequire<[54]</</n.Request<.send@http://localhost:3000/assets/js/aws-sdk-2.7.13.min.js:3:7243
_xamzrequire<[59]</n.Service<.makeRequest@http://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
CognitoUtil.prototype.getList@http://localhost:3000/main.bundle.js:436:10
organizationsViewComponent.prototype.viewUsers@http://localhost:3000/main.bundle.js:1435:22
anonymous/_View_organizationsViewComponent1.prototype._handle_click_13_0@organizationsViewComponent.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
ZoneDelegate.prototype.invoke@http://localhost:3000/polyfills.bundle.js:14768:18
NgZoneImpl/this.inner<.onInvoke@http://localhost:3000/vendor.bundle.js:6256:33
ZoneDelegate.prototype.invoke@http://localhost:3000/polyfills.bundle.js:14767:18
Zone.prototype.runGuarded@http://localhost:3000/polyfills.bundle.js:14664:29
[2]/</</NgZoneImpl</NgZoneImpl.prototype.runInnerGuarded@http://localhost:3000/vendor.bundle.js:6285:72
[2]/</</NgZone</NgZone.prototype.runGuarded@http://localhost:3000/vendor.bundle.js:6518:63
[3]/</</DomEventsPlugin</DomEventsPlugin.prototype.addEventListener/outsideHandler@http://localhost:3000/vendor.bundle.js:11945:79
ZoneDelegate.prototype.invokeTask@http://localhost:3000/polyfills.bundle.js:14801:22
Zone.prototype.runTask@http://localhost:3000/polyfills.bundle.js:14690:29
ZoneTask/this.invoke@http://localhost:3000/polyfills.bundle.js:14871:29

2 个答案:

答案 0 :(得分:2)

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传递。

答案 1 :(得分:0)

您正在类型为AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool的对象上调用listUsers,您需要在类型为AWS.CognitoIdentityServiceProvider的对象上调用它CognitoUserPool没有这样的方法。