如何通过 API 网关将 Cognito 用户池信息传递给 Lambda
How to pass Cognito User Pool information to Lambda through API Gateway
我在 API 网关上有一个 REST API,它使用 Cognito 用户池授权方,API 调用 Lambda 函数。在 Lambda 函数中,我希望能够使用 Cognito 用户池信息(例如 ID 令牌、用户 ID、电子邮件),但我似乎无法让它工作。
从谷歌搜索看来最好的方法是使用 body 映射模板重新格式化上下文数据:
#set($inputRoot = $input.path('$'))
{
"user_id" : "$context.authorizer.claims.sub"
}
或在集成设置中进行设置 Use Lambda Proxy Integration = True
,然后按照以下方式提取用户数据:
def lambda_handler(event, context):
user_id = event.requestContext.authorizer.claims.sub
但是这两种方法都不起作用。第一个给出上下文中没有user_id
的错误:
def lambda_handler(event, context):
user_id = context["user_id"] # <- fails
第二个 returns(我假设是)事件 body 数据,没有 requestContext
属性。
我的集成类型设置为 Lambda。有什么我想念的吗?
所以对于处于类似情况的其他人,我最终只是删除了 API 并重新制作它,然后它适用于两种情况。我猜想与 AWS 的大多数事情一样,您最好删除并重新开始,而不是在已经完成设置后尝试更改设置。
我在 API 网关上有一个 REST API,它使用 Cognito 用户池授权方,API 调用 Lambda 函数。在 Lambda 函数中,我希望能够使用 Cognito 用户池信息(例如 ID 令牌、用户 ID、电子邮件),但我似乎无法让它工作。
从谷歌搜索看来最好的方法是使用 body 映射模板重新格式化上下文数据:
#set($inputRoot = $input.path('$'))
{
"user_id" : "$context.authorizer.claims.sub"
}
或在集成设置中进行设置 Use Lambda Proxy Integration = True
,然后按照以下方式提取用户数据:
def lambda_handler(event, context):
user_id = event.requestContext.authorizer.claims.sub
但是这两种方法都不起作用。第一个给出上下文中没有user_id
的错误:
def lambda_handler(event, context):
user_id = context["user_id"] # <- fails
第二个 returns(我假设是)事件 body 数据,没有 requestContext
属性。
我的集成类型设置为 Lambda。有什么我想念的吗?
所以对于处于类似情况的其他人,我最终只是删除了 API 并重新制作它,然后它适用于两种情况。我猜想与 AWS 的大多数事情一样,您最好删除并重新开始,而不是在已经完成设置后尝试更改设置。