Ich versuche, einen Benutzerdatensatz in ddb für Cognito-Benutzer zu erstellen, sobald sie ihre Registrierung bestätigen. Ich möchte die (föderierte) Identitäts-ID des Benutzers als Primärschlüssel verwenden.AWS Cognito - wie Benutzerdatensatz in Dynamodb erstellt wird, nachdem ein Benutzer die Registrierung bestätigt
Die Identitäts-ID ist jedoch im Lambda-Trigger "postConfirmation" nicht verfügbar. Tatsächlich ist die Identitäts-ID erst verfügbar, wenn sich der Benutzer mit seinem Zugriffstoken authentifiziert. Ich denke, das macht Sinn, wenn man bedenkt, dass Cognito User Pools ein Anbieter sind, wie Facebook und Google. Sie würden keine Identität erstellen, bis sie sich bei diesem Anbieter anmelden.
Im Gegensatz zu Facebook und Google gibt es keinen OAuth-Callback, um einen Datensatz zu erstellen, wenn Sie sich in einem Cognito-Benutzerpool anmelden. Der Benutzer meldet sich einfach so an:
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
console.log('access token + ' + result.getAccessToken().getJwtToken());
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: self.IdentityPoolId,
Logins: {
[`cognito-idp.${self.region}.amazonaws.com/${self.poolData.UserPoolId}`]: result.getIdToken().getJwtToken()
}
});
console.log("AuthService: set the AWS credentials - " + JSON.stringify(AWS.config.credentials));
self.currentUser = cognitoUser;
cb(null, result);
},
onFailure: function(err) {
console.log(err);
cb(err, null);
}
});
Nur dann wird die Identitäts-ID erstellt. Was ist dann die Standardmethode zum Erstellen eines Benutzerdatensatzes? Ist es Standard, den Datensatz zu erstellen, wenn sich der Benutzer zum ersten Mal anmeldet?
Mein Anwendungsfall wäre ein API-Gateway-Endpunkt wie/users /: id/projects, der alle Projekte für einen Benutzer abruft. Wäre es einfacher, den Sub-Wert oder die ID zu verwenden? Ich dachte an die Identität ID. – user1411469
Benutzerpools haben eine enge Integration mit API GW. Wenn Sie alles hinter API GW abbilden, können Sie stattdessen sub verwenden. Die Verwendung der Identitäts-ID würde jedoch besser funktionieren, wenn Sie direkt vom Client auf Dynamo zugreifen möchten. Ich denke, die Arbeit ist in beiden Fällen ziemlich ähnlich. –
Mit global einzigartig meinen Sie, dass Subs in all Ihren Benutzerpools einzigartig sind? – user1411469