AWS AppSync Lambda 解析器 $context.identity 为空
AWS AppSync Lambda resolver $context.identity is null
我正在尝试在从 AWS AppSync 调用的 lambda 函数中获取用户的 IP 地址。
我试过这个输入解析器:
{
"version" : "2017-02-28",
"operation": "Invoke",
"payload": {
"arguments": $util.toJson($context.arguments),
"sourceIp" : $context.identity.sourceIp
}
}
但我在测试时发现,当我通过 AppSync 查询仪表板调用该函数时,$context.identity
为空。
还有其他方法可以获取用户的 ip 地址还是我做错了什么?
谢谢。
更新:
在 aldarisbm 的帮助下,我想出了这个输入解析器:
#set ($forwardHeader = "${context.request.headers.X-Forwarded-For}")
#set ($comma = $forwardHeader.indexOf(','))
#set ($ip = $forwardHeader.substring(0, $comma))
#set ($payload = $context.arguments)
#set ($discard = $payload.put("sourceIp", "${ip}"))
{ "version" : "2017-02-28", "operation": "Invoke", "payload": $util.toJson($payload) }
我没有具体使用 $context.identity
,但您是否尝试检查 AWS 添加到您的请求中的 header:
https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html
有一个 X-Forwarded-For: client-ip-address
、header 被添加到请求中。
这应该可以解决您的问题。
我正在尝试在从 AWS AppSync 调用的 lambda 函数中获取用户的 IP 地址。
我试过这个输入解析器:
{
"version" : "2017-02-28",
"operation": "Invoke",
"payload": {
"arguments": $util.toJson($context.arguments),
"sourceIp" : $context.identity.sourceIp
}
}
但我在测试时发现,当我通过 AppSync 查询仪表板调用该函数时,$context.identity
为空。
还有其他方法可以获取用户的 ip 地址还是我做错了什么?
谢谢。
更新: 在 aldarisbm 的帮助下,我想出了这个输入解析器:
#set ($forwardHeader = "${context.request.headers.X-Forwarded-For}")
#set ($comma = $forwardHeader.indexOf(','))
#set ($ip = $forwardHeader.substring(0, $comma))
#set ($payload = $context.arguments)
#set ($discard = $payload.put("sourceIp", "${ip}"))
{ "version" : "2017-02-28", "operation": "Invoke", "payload": $util.toJson($payload) }
我没有具体使用 $context.identity
,但您是否尝试检查 AWS 添加到您的请求中的 header:
https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html
有一个 X-Forwarded-For: client-ip-address
、header 被添加到请求中。
这应该可以解决您的问题。