I want to add a custom page for live_dashboard to show logged user information.
I assigned conn with current_user
by plug admin_basic_auth
but I only get an empty session list at NotificationPage mount
function
# lib/search_box_web/router.ex
pipeline :admins_only do
plug :fetch_session
plug :admin_basic_auth
end
defp admin_basic_auth(conn, _opts) do
user_id = get_session(conn, :user_id)
not_found = fn(conn) -> conn |> Plug.Conn.send_resp(404, "not found") |> halt() end
if user_id != nil do
case Repo.get(User, user_id) do
nil -> not_found.(conn)
user -> assign(conn, :current_user, user)
end
else
not_found.(conn)
end
...
scope "/admin" do
pipe_through [:protect_from_forgery, :admins_only]
live_dashboard "/dashboard",
metrics: SearchBoxWeb.Telemetry,
ecto_repos: [SearchBox.Repo],
additional_pages: [
notification_page: SearchBoxWeb.Live.NotificationPage
]
end
defmodule SearchBoxWeb.Live.NotificationPage do
@moduledoc false
use Phoenix.LiveDashboard.PageBuilder
alias SearchBox.User
alias SearchBox.Repo
@impl true
def menu_link(_, _) do
{:ok, "Notifications"}
end
@impl true
def mount(unsigned_params, session, socket) do
IO.inspect(unsigned_params) #=> %{"page" => "notification_page"}
IO.inspect(session) #=> []
...
{ :ok, assign_new(socket, :current_user, fn -> lookup_user(user_id) end) }
end
...
end