2017-02-08 13 views
1

Мне нужно определить, поступает ли запрос от localhost.Rails, как узнать, поступает ли запрос от localhost?

Я пытаюсь:

Для запроса http://localhost:3000

# MyController 
request.local?  # -> 0 
request.host  # -> localhost 
request.ip   # -> ::1 
request.remote_ip # -> ::1 

Для запроса 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 

Я хотел бы знать, если есть стандартный способ сделать это. Это выглядит как решение: ApplicationController.local_request?, но защищено и не работает должным образом, потому что request.local? возвращает 0 для местных запросов.

Я также не могу доверять request.host, потому что это может быть подделано /etc/hosts трюками.

ответ

4

request.local? работы, он возвращает 0 и поэтому true в Ruby, так как все в Рубине true кроме false и nil.

Если вы посмотрите на source code это делается с регулярным выражением, и поэтому 0 является ожидаемым и правильным результатом

def local? 
    LOCALHOST =~ remote_addr && LOCALHOST =~ remote_ip 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^