簡體   English   中英

如何將 AWS Cognito 用戶與 DynamoDB 同步

[英]How to sync AWS Cognito user with DynamoDB

我有一個架構設計,我使用 Cognito 進行用戶管理(電子郵件、phone_number 是唯一的屬性),然后我使用 DynamoDB 同步用戶,這樣我就可以讓 AppSync 的用戶查詢和獲取一些用戶信息。

我需要某種方式來同步 DynamoDB 用戶和 Cognito 用戶。 目前,我有一個用戶 postConfirmation lambda 觸發器,用於在新用戶確認所有上述信息時運行插入 DynamoDB 但是:

  • 我如何管理用戶更新他們的 email / 電話:如果我為此直接使用 Cognito 然后他們必須確認他們的新電話號碼 / email 似乎沒有另一個 Lambda 觸發器我可以在此處添加以同步此新數據使用 DynamoDB。
  • 如果我通過 Appsync 使用 DynamoDB 更新用戶 email 和電話,然后通過 DynamoDB stream 將其踢出到 lambda function 以在 Cognito 中更新此信息,用戶尚未確認這些詳細信息,因此信息可能無效。

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

我有同樣的問題。 作為注冊過程的一部分,我將 email、family_name 和 given_name 存儲在 cognito 中。 然后用戶可以隨時更改這些字段中的任何一個。

我找不到跟蹤這些更改的方法,因為文檔沒有 state 任何此類 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% 確定,因為文檔沒有說明這個用例和預令牌觸發器。 試一試看看。

最初發布在這里

我會考慮不將這些詳細信息與 DynamoDb 同步。 您可以像查詢數據庫一樣查詢 Cognito 以查找/獲取用戶。 我們這樣做的方法是,我們使用 DynamoDb 用戶 ID 的 Cognito 子(id),以便為特定用戶從 DynamoDb 獲取數據變得非常容易。 db 表更像是一個補充信息表,就像您用來保存額外用戶數據一樣。 在我看來,這會容易得多——那么您就不需要處理與 email 更改相關的任何事情。

例如 - 我們有一個用於帳戶/用戶的管理員應用程序同步。 為了查找或以其他方式改變用戶,我們通常使用調用Cognito方法的 Lambda。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM