You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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": {}
}

正确返回方式

  1. 不需要修改Cognito流程:直接返回原事件
// C#示例,假设用JObject接收输入
public async Task<JObject> FunctionHandler(JObject inputEvent, ILambdaContext context)
{
    // 执行你的数据库用户创建逻辑
    await CreateDatabaseUser(inputEvent["request"]["userAttributes"]["email"].ToString());
    
    // 关键:返回完整的输入事件对象
    return inputEvent;
}
  1. 需要修改流程(比如自动确认用户):修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:30:15