是否可以使用 cognito 注册用户并一步创建 dymado db 用户配置文件?

Is it possible to sign up user using cognito and create dymado db user profile in one step?

我正在尝试解决下一个问题。 用户使用 Web 应用程序通过 Cognito 进行注册。在注册期间,他必须指出一些数据(如网站、名称等)。成功注册后,应在 DynamoDB 中自动创建用户配置文件,并使用 'sub' 属性作为 ID。普通数据库访问是通过 API 网关 + Lambda 完成的。 问题是令人惊讶的是,Cognito 没有 "post sign-up" lambda 触发器,这对于这种目的来说看起来是最自然的。 "pre sign-up" 触发器很危险,因为注册可能会失败,"post confirmation" 触发器太迟了,因为用户数据已经丢失。 一种可能的方法是将所有数据作为属性存储在 Cognito 中,如果用户配置文件不存在,则在任何登录时将它们复制到数据库。但这是对任何登录的额外不需要的数据库调用。而且这种方法不灵活,因为如果有一天我们想更改数据属性计数或格式,我们对已经创建的用户池无能为力。 两步法是在注册时仅使用登录密码对,并在用户首次使用应用程序登录时询问所有数据(如 "Please fill in profile details before starting to use the app") 看起来不错,但我想一步到位。可能吗?

您可以使用任何 Cognito 属性(自定义或内置属性,例如 profile)暂时 存储注册信息,直到用户得到确认(PostConfirmation_ConfirmSignUp 被触发),此时 profile 将被写入 DynamoDB 并从 Cognito 中清除。

在我的 Web 应用程序中,我不依赖 Cognito 向 DynamoDB 添加任何内容。

我是这样做的:

  • 用户使用 Cognito 注册、确认电子邮件等
  • 用户使用 Cognito 登录并被重定向到我的网络应用登录页面
  • 我的 webapp 登陆页面从 DynamoDB 加载用户的配置文件(使用从 Cognito 返回的 Cognito sub)。如果没有找到配置文件,或者用户详细信息已更改,我 add/update 将详细信息从 id_token 到 DynamoDB。

您的操作方式听起来不错,但我想提一下这个替代方法。

你可以在这里找到我的着陆页代码