我正在尝试在认知用户注册后在ddb中为其创建用户记录。我希望使用用户的(联合)身份标识作为主键。
但是,postConfirmation lambda触发器中的身份标识不可用。实际上,在用户使用其访问令牌进行身份验证之前,身份标识不可用。我认为这是有道理的,因为认知用户池是一个提供商,如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。那么实现创建用户记录的标准方法是什么?用户首次登录时创建记录是否标准?
答案 0 :(得分:2)
我认为,有几种方法可以做到这一点。一种可能是使用子值作为密钥而不是身份ID。它是在创建时提供给用户的,并且是全局唯一的(如身份ID)。如果你走这条路线,你对使用postConfirmation回调的想法很棒。
如果您真的需要身份标识(如果您有其他AWS资源可以访问并希望访问它们,那么我可能只建议在那里建立您自己的钩子到onSuccess块。检查是否存在该标识ID的行,如果是,则不执行任何操作。如果没有,请创建它。这对您的用例有意义吗?还是有更多的皱纹?