当前位置: 首页 > 知识库问答 >
问题:

如何将AWS Cognito用户与DynamoDB同步

凤扬
2023-03-14

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

我需要一些同步DynamoDB用户和Cognito用户的方法。目前,我有一个用户postConfirsion lambda触发器,可以在新用户确认时运行插入到DynamoDB中,以获取所有上述信息,但是:

  • 如何管理用户更新他们的电子邮件/电话:如果我直接使用Cognito进行更新,然后他们必须确认他们的新电话号码/电子邮件,那么似乎没有另一个Lambda触发器,我可以在这里添加,以将此新数据与DynamoDB同步

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

共有2个答案

冀弘济
2023-03-14

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

例如,我们有一个用于帐户/用户的管理appinc。要查找或变异用户,我们通常使用调用Cognito方法的Lambda。

诸葛砚文
2023-03-14

我也有同样的问题。作为注册过程的一部分,我在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%确定,因为文档中没有提到这个用例和预令牌触发器。试试看。

原贴于此

 类似资料:
  • 问题内容: 我使用安装了一个软件包,并运行其安装过程,在安装过程中,该软件包还安装了其他几个软件包,并将其添加到(假设)中,我假设使用 npm 。很好,但是现在我不同步了。 同步到当前状态的正确,非手动方法是什么? 编辑:将缺少的软件包显示为: 但这并没有添加它们。 问题答案: 奔跑,或只是。 锁定文件会在对依赖项进行任何更改时(即在您运行yarn命令时)完整更新。 从Yarn文档: 您的yarn

  • 我对AWS相当陌生,尽管我在搜索和阅读角色 用例示例: User1在名为“Groups”的表中创建项目“Group_A”。 User2在名为“Groups”的表中创建项目“Group_B”。 另一个名为“Messages”的表有一个排序键,可以是表“Groups”中的任何项 User1如何在不允许访问User2的情况下将“组A”的“消息”的访问权授予User3和User4。

  • 我使用AWS加密客户端。下面的代码抛出错误为 错误:@DoNotTouch不适用于现场 然而,如果我给出@DoNotTouch配置,如下所示[使用getter和setter] 这很好用。我猜lombok生成的getter和setter不会被AmazoneCryptionClient识别 我在跟踪这个aws doc:https://aws.amazon.com/blogs/developer/cli

  • 如果webservice可以用不同的xml结构响应呢?例如和具有完全不同的字段?

  • 问题内容: 我正在使用Python 2.6和用于多线程的多处理模块。现在,我希望有一个同步的字典(我真正需要的唯一原子操作是值上的+ =运算符)。 我应该用multiprocessing.sharedctypes.synchronized()调用包装字典吗?还是另一种方式? 问题答案: 介绍 似乎有很多主席建议,没有可行的例子。这里列出的答案都没有建议使用多处理,这令人失望和不安。作为python