describe CustomersController, type: :controller do
describe "GET search" do
it "returns a 200" do
whitelisted_ip = '73.1.193.230' # a comcast ip address
request.headers['REMOTE_ADDR'] = whitelisted_ip
request.headers['X-Forwarded-For'] = whitelisted_ip
get :index
expect(response).to have_http_status(:ok)
end
end
end
6条答案
按热度按时间wribegjk1#
我会使用
request.remote_ip
,它很简单,也很好用。有什么理由需要其他方法吗?请参阅:Get real IP address in local Rails development environment以了解您可以使用客户端服务器ip执行的其他操作。
cpjpxq1n2#
request.remote_ip
是对所有可用IP地址信息的解释,它将做出最佳猜测。如果您直接访问变量,您将负责按正确的优先顺序测试它们。代理引入了许多标头,这些标头创建具有不同名称的环境变量。mwg9r5ms3#
使用以下命令获取客户端IP:
4dbbbstv4#
我发现
request.env['HTTP_X_FORWARDED_FOR']
在request.remote_ip
返回127.0.0.1
的情况下也非常有用t2a7ltrp5#
对于任何有兴趣并使用更新的rails和Devise gem的人:Devise的“trackable”选项在用户表中包含一个用于当前/最后一个登录IP的列。
xytpbqjk6#
从Mozilla文件:
当客户端直接连接到服务器时,客户端的IP地址将发送到服务器(通常会写入服务器访问日志)。但是,如果客户端连接通过任何正向或反向代理,服务器只能看到最终代理的IP地址,这通常没有什么用处。如果最终代理是负载平衡器,并且与服务器属于同一个安装,则情况尤其如此。因此,为了向服务器提供更有用的客户端IP地址,使用了X-Forwarded-For请求报头。
remote_ip实际上会检查一些传入的头文件。这包括
REMOTE_ADDR
和X-Forwarded-For
。X-Forwarded-For
用于代理的情况。但是首先检查REMOTE_ADDR
。您可以在rspec测试中验证这一点:控制器内部: