AWS Cognito - 在用户确认注册后如何在dynamodb中创建用户记录

时间:2017-04-07 19:10:54

标签: amazon-web-services amazon-cognito aws-cognito

我正在尝试在认知用户注册后在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。那么实现创建用户记录的标准方法是什么?用户首次登录时创建记录是否标准?

1 个答案:

答案 0 :(得分:2)

我认为,有几种方法可以做到这一点。一种可能是使用子值作为密钥而不是身份ID。它是在创建时提供给用户的,并且是全局唯一的(如身份ID)。如果你走这条路线,你对使用postConfirmation回调的想法很棒。

如果您真的需要身份标识(如果您有其他AWS资源可以访问并希望访问它们,那么我可能只建议在那里建立您自己的钩子到onSuccess块。检查是否存在该标识ID的行,如果是,则不执行任何操作。如果没有,请创建它。这对您的用例有意义吗?还是有更多的皱纹?