我在ApiGateway中使用了Lambda代理和Cognito用户池授权程序。在Lambda函数中,我可以通过事件对象访问路径等变量。除此之外,我想访问经过身份验证的用户的声明。在编写的文档中,我应该使用:
context.authorizer.claims.property
但是我的授权人是空的,所以我得到
Cannot read property 'claims' of undefined
有想法的人吗?
答案 0 :(得分:2)
如果您指的是this part of the documentation,$context.authorizer.claims
是集成的映射模板的一部分。它与处理程序的context
参数无关。
使用Lambda Proxy integration
,您正在使用passthrough mapping template
。这似乎是什么不包括什么,你正在寻找(见编辑)。您可能必须禁用Lambda Proxy integration
并在映射模板中使用类似的内容:
{
"identity" : {
"sub" : "$context.authorizer.claims.sub",
"email" : "$context.authorizer.claims.email"
}
}
映射模板“构建”Lambda的event
参数。因此,您可以通过event
参数访问您声明的部分内容。
exports.handler = (event, context, callback) => {
// TODO implement
callback(null, event.identity.email);
};
请注意,我稍微修改了文档示例,以避免对context
可能存在的另一个混淆:
event
参数的关键字< =我将其重命名为identity
修改强>
正如 doorstuck 所指出的,the information is available using the proxy integration
答案 1 :(得分:2)
接受的答案可行,但不需要。使用Lambda代理集成时,您可以访问授权者声明:
event.requestContext.authorizer.claims
您可以尝试console.log(event);
并查看从CloudWatch Logs中的Lambda代理集成中获得的信息。