我正在尝试找出为登录到在AWS上运行的应用程序的用户管理最终用户信息的最佳方法 . 像他们的名字,电子邮件......

使用Cognito用户池Cognito Identity Pool对用户进行身份验证 . 该应用程序调用AWS Lambdas代表用户执行工作 . Lambda可以访问Lambda上下文中用户的Cognito身份ID .

遗憾的是,无法从该身份ID中找到该用户的身份,它只是Cognito生成的GUID,并且不会绑定到用户池中的行 . 如果我需要通过电子邮件发送给用户我无法做的事 .

看来我需要自己维护一个用户信息表,Cognito似乎没用,我的表会复制用户池中的一些信息(名称,电子邮件),再加上自定义字段 .

好吧,我可以在DynamoDB中有一个UserInfo表(我不想为此使用Cognito Sync数据集) . 该表需要在Cognito Identity ID上编制索引才有用,因为在任何Lambda上下文中我都获得了身份ID,并且我需要通过该Cognito标识符查找UserInfo .

我的问题是:

  • 当用户第一次注册到应用程序时,你会在UserInfo表中添加一行,并且Cognito Post Confirmation触发器lambda是否正确?我假设触发器只运行一次,当用户第一次注册时,而不是在他们稍后登录时 .

  • 如果是这样,那个触发器lambda不会收到一个认知身份ID,因为这是一个用户池触发器 . 它与Cognito身份池无关 . 我需要一个等效的Identity Pool触发器,但是没有这样的东西 . 因此,这个想法不起作用 .

  • 这意味着我可以想到的是每个经过身份验证的lambda调用,lambda需要检查这是否是这个用户第一次在应用程序上工作,创建UserInfo行,以及提取电子邮件我需要拥有应用程序从客户端发送,因为它不在上下文中,我不能在后端从cognito ID中提取它 . 似乎很脏,让客户端应用程序像拉动推送电子邮件和属于后端的其他用户信息一样工作 .

想法?