我正在尝试通过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) }
答案 0 :(得分:1)
我没有专门使用$context.identity
,但是您是否尝试检查过AWS添加到您的请求中的标头:
https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html
有一个X-Forwarded-For: client-ip-address
头被添加到请求中。
这应该可以解决您的问题。