C#中Cognito Post Confirmation类型Lambda触发器返回值规范
Cognito触发器Lambda的正确返回格式
你遇到的“Unrecognizable lambda output”错误,本质是Cognito对触发器Lambda的输出有严格格式要求——返回ILambdaContext、纯字符串这类无关内容肯定过不了校验。不同类型的Cognito触发器(比如用户注册后、认证后触发的)返回格式略有差异,但核心规则很明确:
核心要求
- 绝对不能返回无关内容,必须返回符合对应触发器规范的JSON对象
- 如果你的逻辑不需要修改Cognito的处理流程,最简单的方式就是原封不动返回输入的事件对象,Cognito会自动继续后续流程
常用场景示例(以Post Confirmation触发器为例)
这是最常用的“用户完成注册后创建数据库记录”的触发器类型,给你具体的返回示例:
输入事件的基本结构(简化版)
{ "version": "1", "region": "us-east-1", "userPoolId": "us-east-1_xxxxxx", "userName": "user123", "request": { "userAttributes": { "sub": "xxxx-xxxx-xxxx", "email": "user@example.com" } }, "response": {} }
正确返回方式
- 不需要修改Cognito流程:直接返回原事件
// C#示例,假设用JObject接收输入 public async Task<JObject> FunctionHandler(JObject inputEvent, ILambdaContext context) { // 执行你的数据库用户创建逻辑 await CreateDatabaseUser(inputEvent["request"]["userAttributes"]["email"].ToString()); // 关键:返回完整的输入事件对象 return inputEvent; }
- 需要修改流程(比如自动确认用户):修改
response字段后返回完整事件
public async Task<JObject> FunctionHandler(JObject inputEvent, ILambdaContext context) { await CreateDatabaseUser(inputEvent["request"]["userAttributes"]["email"].ToString()); // 比如设置自动确认用户 inputEvent["response"]["autoConfirmUser"] = true; // 依然要返回完整事件 return inputEvent; }
避坑提醒
- 确保返回的是合法JSON:不能有循环引用,布尔值、数字这类类型要正确(比如别把
true写成字符串"true") - 不要遗漏
version、userPoolId这类核心字段:Cognito靠这些字段识别事件来源 - 如果用强类型类接收输入,要保证返回的类结构和输入完全一致(比如包含
Version、Request、Response等属性)
内容的提问来源于stack exchange,提问作者table_man
相关产品推荐
相关产品推荐

