【问题标题】:How to sync AWS Cognito user with DynamoDB如何将 AWS Cognito 用户与 DynamoDB 同步
【发布时间】:2020-11-18 18:23:03
【问题描述】:

我有一个架构设计,我使用 Cognito 进行用户管理(电子邮件、电话号码是唯一的属性),然后我使用 DynamoDB 来同步用户,这样我就可以让 AppSync 的用户查询和获取一些用户信息.

我需要某种方式将 DynamoDB 用户与 Cognito 用户同步。目前,我有一个用户 postConfirmation lambda 触发器,用于在新用户确认上述所有信息时向 DynamoDB 中运行插入操作,但是:

  • 我如何管理更新他们的电子邮件/电话的用户:如果我直接使用 Cognito,然后他们必须确认他们的新电话号码/电子邮件,似乎没有另一个 Lambda 触发器我可以在此处添加以进行同步使用 DynamoDB 获取这些新数据。
  • 如果我通过 Appsync 使用 DynamoDB 来更新用户电子邮件和电话,然后通过 DynamoDB 流将其踢出到 lambda 函数以在 Cognito 中更新此信息,则用户尚未确认这些详细信息,因此信息可能无效.

让 Cognito 和 DynamoDB 保持同步的理想架构是什么?

【问题讨论】:

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


    【解决方案1】:

    我遇到了同样的问题。作为注册过程的一部分,我将电子邮件、family_name 和 given_name 存储在 cognito 中。然后用户可以随时更改这些字段中的任何一个。

    我找不到跟踪这些更改的方法,因为文档没有说明同步事件的任何此类 lambda 触发器。但是,由于 idToken 在我的情况下包含用户属性,因此它必须在用户进行更改后自行更新。所以我对此进行了测试,发现只要用户属性发生变化,就会调用 Pre-Token 触发器,以便它可以重新生成新的令牌。该 lambda 包含以下有效负载

    {
      version: '1',
      triggerSource: 'TokenGeneration_RefreshTokens',
      region: 'XXX',
      userPoolId: '',
      userName: 'XXX',
      callerContext: {
        awsSdkVersion: 'aws-sdk-unknown-unknown',
        clientId: 'XXX'
      },
      request: {
        userAttributes: {
          sub: 'XXX',
          email_verified: 'false',
          'cognito:user_status': 'CONFIRMED',
          'cognito:email_alias': 'user1@mailinator.com',
          given_name: 'Name',
          family_name: 'New',
          email: 'user1@mailinator.com'
        },
        groupConfiguration: {
          groupsToOverride: [],
          iamRolesToOverride: [],
          preferredRole: null
        }
      },
      response: { claimsOverrideDetails: null }
    }
    

    所以我在这个 lambda 本身中更新了 dynamodb 中的记录。我不是 100% 确定,因为文档没有说明这个用例和预令牌触发器。试试看吧。

    Originally Posted here

    【讨论】:

      【解决方案2】:

      我会考虑不将这些详细信息与 DynamoDb 同步。您可以像查询数据库一样查询 Cognito 来查找/获取用户。我们这样做的方式是使用 DynamoDb 用户 ID 的 Cognito 子(id),以便从 DynamoDb 中为特定用户获取数据变得非常容易。 db 表更像是一个补充信息表,就像您用来保存额外的用户数据一样。 imo 将变得容易得多 - 然后您无需处理与电子邮件更改相关的任何事情。

      例如 - 我们有一个用于帐户/用户的管理员 appsync。要查找或以其他方式改变用户,我们通常使用调用 Cognito 方法的 Lambda。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-31
        • 2021-04-25
        • 2022-12-14
        • 2018-05-31
        • 1970-01-01
        • 2021-06-23
        • 2015-03-04
        • 2016-05-10
        相关资源
        最近更新 更多