我正在尝试在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
答案 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
没有这样的方法。