使用Rails 3路由,您如何仅允许来自127.0.0.1的请求?

mic*_*cah 6 routes ruby-on-rails-3

我正在编写一个应用程序,其中几个路径只能从localhost访问.看起来这可以通过新的路由系统实现.

http://www.railsdispatch.com/posts/rails-3-makes-life-better

这有一些基于IP地址限制路由,并为您的路由设置IP地址黑名单的示例,但我对只有一个IP地址的白名单感兴趣.

如果像这样的东西工作会很酷:

get "/posts" => "posts#show", :constraints => {:ip => '127.0.0.1'}
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.我只是错过了正确的语法吗?

小智 14

你可以这样做

get "/posts" => "posts#show", :constraints => {:ip => /127.0.0.1/}
Run Code Online (Sandbox Code Playgroud)

或这个

constraints(:ip => /127.0.0.1/) do
  get "/posts" => "posts#show"
end
Run Code Online (Sandbox Code Playgroud)


And*_*oni 0

按照 Yehuda 帖子中的示例,您应该创建一个适当的对象来处理复杂的约束。因此,只需编辑该示例即可有所帮助。有一行代码可以检查某个 ip 是否被列入黑名单:

!@ips.include?(request.remote_ip)
Run Code Online (Sandbox Code Playgroud)

您应该编写类似的逻辑(但更简单)来检查 request.remote_ip == 127.0.0.1