2016-09-02 3 views
0

Я создал свое первое приложение Elixir/Phoenix, и я хочу регистрировать IP-адреса моих посетителей.Регистрация IP-адресов для всех посетителей

В моем router.ex, я «регистрирую» IP-адреса для существующих страниц.

def log_ip(conn, _) do 
    conn.remote_ip 
    |> Tuple.to_list 
    |> Enum.join(".") 
    |> IO.puts 
    conn 
end 

... 
defmodule Mysite.Router do 
    use Mysite.Web, :router 

    pipeline :browser do 
    plug :log_ip 
    ... 
    scope "/", Mysite do 
    pipe_through :browser 

Это все работает отлично, как правило, но я вижу в терминале, что есть некоторые боты, которые пытаются получить доступ несуществующих страниц, например, "/admin.php", "/command.php". Я хочу регистрировать IP-адреса THESE, но приведенный выше код не работает для этого.

потенциально связан между собой, но у меня есть этот код, чтобы справиться с людьми, которые пострадали несуществующие ссылки (например,/блог/несуществующая-страница)

defimpl Plug.Exception, for: Phoenix.Template.UndefinedError do 
    def status(_exception), do: 404 
end 

Есть ли способ, чтобы получить доступ к соед и журнал remote_ip, прежде чем я верну 404 (или лучший способ справиться со всем этим)?

ответ

3

Вы можете поместить свой логгер в свою конечную точку, а не в свой маршрутизатор. Конечная точка находится в lib/<yourapp>/endpoint.ex. Вы увидите что-то вроде:

... 
    plug Plug.RequestId 
    plug Plug.Logger 
    ... 

Вы можете поставить как ваше определение функции и plug :log_ip вызов после тех, к примеру.

+0

Спасибо! Я создал модуль Plug (вместо использования Function Plug), а затем добавил "plug Mysite.Plugs.LogIp" в endpoint.ex. –

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