使用Pre Token Generation Lambda触发器,如何设置claimsToAddOrOverride返回数组
解决InvalidLambdaResponseException并实现eaid数组转换
问题核心原因
Cognito的Pre Token Generation触发器要求严格的响应格式:必须返回包含response键的完整event对象,且自定义属性需嵌套在claimsOverrideDetails -> claimsToAddOrOverride层级下。返回格式不符合要求就会触发Unrecognizable lambda output错误。
正确实现代码
def lambda_handler(event, context): # 从用户属性中提取custom:eaid user_attrs = event['request']['userAttributes'] eaid_raw = user_attrs.get('custom:eaid', '') # 按|拆分字符串为数组,处理空值情况 eaid_array = eaid_raw.split('|') if eaid_raw else [] # 构建Cognito要求的响应结构 event['response'] = { 'claimsOverrideDetails': { 'claimsToAddOrOverride': { 'eaid': eaid_array } } } # 必须返回完整的event对象 return event
关键注意事项
- 必须返回完整的event对象,不能只返回自定义属性部分,Cognito需要接收包含原始请求和修改后响应的完整结构。
- 嵌套层级不能错:自定义属性必须放在
claimsToAddOrOverride字典中,Python的list会自动序列化为JSON数组,满足输出要求。 - 容错处理:当
custom:eaid不存在或为空时,返回空数组避免后续逻辑报错。
常见错误排查
- 检查旧代码是否直接返回了单独的属性字典(比如
return {'eaid': eaid_array}),这会完全不符合Cognito的响应格式要求。 - 确认是否遗漏了
response或claimsOverrideDetails层级,少一层都会触发格式识别错误。
内容的提问来源于stack exchange,提问作者abbasCoder51
相关产品推荐
相关产品推荐

