amazon-web-services - 如何将 AWS Cognito 用户与 DynamoDB 同步

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

我有一个架构设计,我使用 Cognito 进行用户管理(电子邮件、电话号码是唯一的属性),然后我使用 DynamoDB 同步用户,以便我可以让 AppSync 的用户查询和获取一些用户信息。
我需要某种方式将 DynamoDB 用户与 Cognito 用户同步。目前,我有一个用户 postConfirmation lambda 触发器,用于在新用户确认后运行插入到 DynamoDB 中的所有上述信息,但是:

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

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

    最佳答案

    我有同样的问题。作为注册过程的一部分,我将电子邮件、family_name 和 given_name 存储在 cognito 中。然后用户可以随时更改这些字段中的任何一个。
    我找不到跟踪这些更改的方法,因为文档没有说明同步事件的任何此类 lambda 触发器。但是,由于idToken在我的情况下包含用户属性,它必须在用户进行更改后自行更新。所以我对此进行了测试,发现只要用户属性发生变化,就会调用 Pre-Token 触发器,以便它可以重新生成新的 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% 确定,因为文档没有说明这个用例和预 token 触发器。试试看。
    Originally Posted here

    关于amazon-web-services - 如何将 AWS Cognito 用户与 DynamoDB 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63148897/

    相关文章:

    amazon-web-services - AWS 上的 Golang 部署

    ios - AWS Cognito 身份验证凭证 IOS Swift 2.3 - 3(集成用户池和身份池)

    amazon-web-services - 在查询DynamoDB中使用Projection Expressions是否会降低读取容量单位消耗?

    node.js - 如何用 Jest 模拟 AWS Cognito CognitoIdentityServiceProvider?

    ios - AWS iOS v2 Cognito 与 STS 身份验证

    node.js - 将 http 转发到 https - Elastic Beanstalk + Nginx

    amazon-web-services - 来自不同 AWS 账户的 EC2 之间的区域数据传输费用

    node.js - NodeJS 中用于 API 的 stub DynamoDB

    graphql - AWS AppSync GraphQL : DynamoDB ConditionalCheckFailedException when updating object in mutation

    active-directory - 如何继续为 AWS Cognito 使用 AD FS SAML?