一旦 Cognito 用户确认注册,我将尝试在 ddb 中为他们创建用户记录。我希望使用用户的(联合)身份 ID 作为主键。
但是,身份 ID 在 postConfirmation lambda 触发器中不可用。事实上,只有在用户使用其访问 token 进行身份验证后,身份 ID 才可用。我想这是有道理的,因为认知用户池是一个提供商,就像 Facebook 和谷歌一样。在他们通过该提供商登录之前,您不会创建身份。
与 facebook 和 google 不同,登录 cognito 用户池时没有需要调用 oauth 回调来创建记录。用户只需像这样登录:
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);
}
});
只有这样,身份 ID 才会被创建。那么实现创建用户记录的标准方法是什么?用户首次登录时创建记录是否标准?
最佳答案
我认为有几种方法可以做到这一点。一种可能是使用子值作为键而不是身份 ID。它在创建时提供给用户,并且是全局唯一的(如身份 ID)。如果您选择这条路线,那么您对使用 postConfirmation 回调的想法就很棒。
如果您确实想要身份ID(如果您有其他AWS资源可以访问并且想要访问它们,那么您可能会这样做),那么我可能建议您在onSuccess block 中构建您自己的 Hook 。检查该身份 ID 的行是否存在,如果存在则不执行任何操作。如果没有,请创建它。这对您的用例有意义吗?还是有更多皱纹?
关于amazon-web-services - AWS Cognito - 用户确认注册后如何在 dynamodb 中创建用户记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43285479/