AWS AppSync Lambda解析器$ context.identity为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","payload": $util.toJson($payload) } 

解决方法

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

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

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...