#elixir #phoenix-framework
#elixir #phoenix-framework
Вопрос:
Мне нужно получить IP-адрес клиента, это не работает:
def create(conn) do
ip_address = conn.inet.ip_address
# ....
из-за key :inet not found in: %Plug.Conn
. Как я могу тогда получить IP-адрес?
Ответ №1:
The получить IP:
conn.remote_ip
Приведение из ip_address в string:
to_string(:inet_parse.ntoa(conn.remote_ip))
Комментарии:
1. Код приведения не является Elixir 🙂 Это способ Elixir:
conn.remote_ip |> :inet_parse.ntoa |> to_string()
😉
Ответ №2:
Проверьте эти поля запроса:
remote_ip — IP-адрес клиента, пример: {151, 236, 219, 228}. Это поле предназначено для перезаписи плагинами, которые понимают, например, заголовок X-Forwarded-For или протокол ПРОКСИ HAProxy. По умолчанию используется IP-адрес однорангового узла.
Это то, что вы ищете:
conn.remote_ip
Комментарии:
1.
conn.remote_ip |> Tuple.to_list |> Enum.join(".")
также будет работать. Нет необходимости выполнятьInteger.to_string
вызов.2. Упомянутые примеры работают только для адресов IPv4. Если вам нужно решение для IPv4 и IPv6, используйте функцию ntoa inet от Erlang:
conn.remote_ip |> :inet.ntoa() |> to_string()