Создание промежуточного программного обеспечения, которое захватывает IP - PullRequest
3 голосов
/ 18 августа 2011

Я пытаюсь написать свою первую промежуточную стойку. И нужна помощь. Мне нужно промежуточное программное обеспечение, которое находит IP-адрес запрашивающей стороны и, если оно находится в списке разрешенных IP-адресов, продолжает запрос, в противном случае оно прерывается.

Сложность в том, что мне нужно это, чтобы работать на герою, где вы не можете использовать request.ip: http://developerhemal.tumblr.com/post/3958107290/client-ip-addresses-on-heroku

Итак, у меня есть следующее:

class RestrictIP
  def initialize(app, message = "Hello")
    @app = app
    @message = message
  end

  def call(env)
    dup._call(env)
    @ip = env['HTTP_X_REAL_IP'] ||= env['REMOTE_ADDR']
  end

  def each(&block)
    block.call("<!-- #{@ip} -->\n")
    @response.each(&block)
  end
end

Это ошибки с:

NoMethodError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]=):

Для моего первого изменения я просто хочу убедиться, что смогу захватить и поместить IP-адрес запрашивающего в документ html.

Есть ли эксперты по промежуточному программному обеспечению? Спасибо

1 Ответ

0 голосов
/ 29 октября 2012

Согласно этому сообщению , кажется, вы могли бы использовать следующее:

ip = env[‘HTTP_X_REAL_IP’] ||= env[‘REMOTE_ADDR’]

Я не проверял это, поскольку я не на Heroku.

...