开发者

Building middleware that grabs the IP

开发者 https://www.devze.com 2023-03-29 16:30 出处:网络
I\'m trying to write my firsts rack middleware. And need help. I want middleware that find the requestor\'s IP and if it is in the allowed list of IP continues the request, otherwise it aborts.

I'm trying to write my firsts rack middleware. And need help. I want middleware that find the requestor's IP and if it is in the allowed list of IP continues the request, otherwise it aborts.

The tricky part is I need this to work on heroku where you can't use request.ip: http://developerhemal.tumblr.com/post/3958107290/client-ip-addresses-on-heroku

So I have the following:

class RestrictIP
  def initialize(app, message = "Hello")
    @app = app
    @message = message
  end开发者_如何学C

  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

This errors with:

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.[]=):

For my first itteration I just want to make sure I can grab and put the requestor's IP on the html doc.

Any rack middleware experts out there? Thanks


As per this post, it appears you could use the following:

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

I haven't tested this as I'm not on Heroku.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号