Rails,如何知道请求是否来自本地主机?

fgu*_*len 1 ruby-on-rails localhost request

我必须确定请求是否来自本地主机。

我在尝试:

要求 http://localhost:3000

# MyController
request.local?     # -> 0
request.host       # -> localhost
request.ip         # -> ::1
request.remote_ip  # -> ::1
Run Code Online (Sandbox Code Playgroud)

要求 http://127.0.0.1:3000

# MyController
request.local?     # -> 0
request.host       # -> 127.0.0.1
request.ip         # -> 127.0.0.1
request.remote_ip  # -> 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

我想知道是否有标准的方法。看起来像解决方案:ApplicationController.local_request?受到保护且由于request.local?返回0本地请求而无法正常工作。

我也不能相信,request.host因为它可以被/etc/hosts花招欺骗。

Eye*_*dic 5

request.local?工作原理,它返回0,因此true在Ruby中,因为一切都在Ruby是true除了falsenil

如果您查看源代码,它是使用正则表达式完成的,因此0预期的正确结果也是如此

def local?
  LOCALHOST =~ remote_addr && LOCALHOST =~ remote_ip
end
Run Code Online (Sandbox Code Playgroud)