我正在尝试将用户数据(名称 + 一些自定义属性)从 AWS Cognito 用户池同步到 DynamoDB 表。Cognito 有许多与登录/注册相关的触发器但我没有发现在更新用户属性时触发的任何触发器。
当用户属性发生变化时,如何触发 Lambda 或以其他方式同步数据?
答案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': '[email protected]',
given_name: 'Name',
family_name: 'New',
email: '[email protected]'
},
groupConfiguration: {
groupsToOverride: [],
iamRolesToOverride: [],
preferredRole: null
}
},
response: { claimsOverrideDetails: null }
}
因此,我在此 lambda 本身中更新 dynamodb 中的记录。但我不是 100% 确定,因为文档没有提到此用例和预令牌触发器。尝试一下看看。
答案2
我正在寻找类似的情况,但看起来 Cognito 还没有这种情况。
AWS 知道这一点,但我找不到跟踪他们进展的方法。你可以在这里查看当 Cognito 用户属性发生变化时,AWS 线程触发服务/Lambda。
现在我所做的是status
在 dynamodb 的用户表中有一个字段,因此当我更改数据 cognito 时,我将这个字段设置为 false,这将触发一个 lambda,从 cognito 获取数据并进行同步。