trusted_proxy?
возвращает true, если ему доверяют, и да, похоже, что он возвращает true, только если это локальный адрес - что-то с 10.xxx или 172.xxx, адрес обратной связи (127.0.0.1) или localhost
и т. Д.
Ниже он имеет remote_addrs.reject!
, который берет коллекцию и удаляет из этой коллекции все, что находится в блоке true
.Представьте, что у вас есть набор IP-адресов (сочетание локальных и удаленных) - этот блок принимает этот список IP-адресов, а отклоняет любой, который возвращает true с помощью метода trusted_proxy?
, поэтому все, что вам нужноостались удаленные адреса.
Другими словами, он берет список IP-адресов и отклоняет локальные, оставляя вам только удаленные IP-адреса.
forwarded_ips
выбираются на основе информации в заголовке HTTP_X_FORWARDED_FOR
и т. д.
Наконец, блок, начинающийся с if client_ip
, возвращает true
, если список forwarded_ips
включает client_ip
,и false
в противном случае.
В целом, и я немного догадываюсь об этой последней части, но я думаю, что цель метода ip
состоит в том, чтобы в конечном итоге вернуть IP-адрес соединения или что-то ещев том и только в том случае, если это доверенный IP-адрес, который в противном случае не является попыткой подделки.Как я уже говорил, я не совсем уверен в этом, но метод ip
, похоже, действует как последовательность фильтров на входе, чтобы дать вам что-то полезное в рамках цели этого метода.