我在我的ApiGateway中使用Lambda代理和Cognito用户池授权器。在Lambda函数中,我可以通过事件对象访问路径等变量。除此之外,我想访问经过身份验证的用户的声明。在文件上写着,我应该使用:AWS ApiGateway Lambda代理访问授权者
context.authorizer.claims.property
但我授权为空,所以我得到
Cannot read property 'claims' of undefined
任何人只要有一个想法?
我在我的ApiGateway中使用Lambda代理和Cognito用户池授权器。在Lambda函数中,我可以通过事件对象访问路径等变量。除此之外,我想访问经过身份验证的用户的声明。在文件上写着,我应该使用:AWS ApiGateway Lambda代理访问授权者
context.authorizer.claims.property
但我授权为空,所以我得到
Cannot read property 'claims' of undefined
任何人只要有一个想法?
如果您指的是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"
}
}
映射模板“打造”拉姆达的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
接受的答案会工作,但它并不需要指出。当使用lambda代理集成您可以访问授权的权利要求:
event.requestContext.authorizer.claims
你可以尝试console.log(event);
,看看你得到了一个lambda代理整合CloudWatch的日志信息。
不错,当* not *使用Lambda代理集成时,“Method Requet passthrough”不包含它。我认为会使用相同的映射模板。 –
感谢您的详细解答。当我禁用代理集成时,我将无法访问像路径,查询字符串等属性? – SnowMax
您也可以通过映射模板来完成。我会建议选择“Method Requet passthrough”模板并用你需要的模板来完成它。 –
作品!谢谢;) – SnowMax