AWS AppSync Lambda解析器$ context.identity为null

时间:2020-08-15 20:38:09

标签: amazon-web-services aws-lambda graphql aws-appsync

我正在尝试通过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) } 

1 个答案:

答案 0 :(得分:1)

我没有专门使用$context.identity,但是您是否尝试检查过AWS添加到您的请求中的标头:

https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html

有一个X-Forwarded-For: client-ip-address头被添加到请求中。

这应该可以解决您的问题。