首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有IP地理定位的Rails 5 IntegrationTest

带有IP地理定位的Rails 5 IntegrationTest
EN

Stack Overflow用户
提问于 2017-02-09 02:32:29
回答 1查看 353关注 0票数 1

我正在使用geokit-rails gem根据通过#geocode_ip_address (https://github.com/geokit/geokit-rails#ip-geocoding-helper)登录的用户的IP地址执行地理定位。

但是,我很难找到一种通过Rails 5 IntegrationTest来测试这个问题的方法。在模拟登录时,我需要一种提供多个远程IP地址的方法,但在以下问题上我陷入了困境:

  • 如何伪造IP地址(根据用户登录情况而有所不同)
  • 如何防止向地理定位服务提出大量请求

我最初的方法是跳过它,将:geo_location信息放在session哈希中,但是这在Rails 5中似乎已经消失了。

有人有过类似的设计经验吗?

EN

回答 1

Stack Overflow用户

发布于 2019-08-02 08:38:33

根据geokit-rails lookup.rb#L44中ip查找的实现,您可以简单地将remote_ip方法存根到request对象上。

geokit-rails在基于IP的基础上找到了一个geo_location,它将它作为geo_location对象存储在session中。您可能不希望这种“缓存”行为出现在开发/测试中,所以我在欺骗IP之前删除对象。

这里有一个实例实现:

代码语言:javascript
运行
复制
class SomeController < ApplicationController
  prepend_before_action :spoof_remote_ip if: -> { %w(development test).include? Rails.env }
  geocode_ip_address

  def index
    @current_location = session[:geo_location]
  end

  def spoof_remote_ip
    session.delete(:geo_location) if session[:geo_location]
    request.env["action_dispatch.remote_ip"] = ENV['SPOOFED_REMOTE_ADDR']
  end
end
代码语言:javascript
运行
复制
# .env
SPOOFED_REMOTE_ADDR = "xx.xxx.xx.xxx"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42127235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档