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
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
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 –
Vielen Dank für Ihre Hilfe. – JSONGagnon