Packages
legendary_core
7.17.1
8.12.0
8.11.1
8.11.0
8.10.0
8.9.2
8.9.1
8.5.3
8.5.2
8.5.1
8.5.0
8.4.0
8.3.6
8.3.5
8.3.4
8.3.3
8.3.2
8.3.1
8.3.0
8.2.7
8.2.5
8.2.4
8.2.3
8.2.2
8.2.1
8.2.0
8.1.1
8.1.0
8.0.1
8.0.0
7.17.12
7.17.8
7.17.7
7.17.6
7.17.5
7.17.4
7.17.3
7.17.2
7.17.1
7.17.0
7.16.12
7.16.11
4.5.4
4.0.0
2.12.0
2.11.5
2.6.0
2.4.1
2.4.0
2.3.7
2.1.2
A PETAL-stack batteries-included boilerplate for making Phoenix apps without tedium.
Current section
Files
Jump to
Current section
Files
lib/auth_web/controller_callbacks.ex
defmodule Legendary.AuthWeb.Pow.ControllerCallbacks do
@moduledoc """
Hook into Pow Controllers to provide additional framework feature. In particular,
we disconnect any active live views when a user logs out. This will cause the
live view to re-connect with the new session environment.
"""
alias Pow.Extension.Phoenix.ControllerCallbacks
alias Plug.Conn
def before_respond(Pow.Phoenix.SessionController, :create, {:ok, conn}, config) do
user = conn.assigns.current_user
conn =
conn
|> Conn.put_session(:current_user_id, user.id)
|> Conn.put_session(:live_socket_id, "users_sockets:#{user.id}")
ControllerCallbacks.before_respond(
Pow.Phoenix.SessionController,
:create,
{:ok, conn},
config
)
end
def before_respond(Pow.Phoenix.SessionController, :delete, {:ok, conn}, config) do
case Conn.get_session(conn, :live_socket_id) do
nil ->
nil
live_socket_id ->
%{private: %{phoenix_endpoint: endpoint}} = conn
apply(endpoint, :broadcast, [live_socket_id, "disconnect", %{}])
end
conn =
conn
|> Conn.delete_session(:live_socket_id)
|> Conn.delete_session(:current_user_id)
ControllerCallbacks.before_respond(
Pow.Phoenix.SessionController,
:delete,
{:ok, conn},
config
)
end
defdelegate before_respond(controller, action, results, config), to: ControllerCallbacks
defdelegate before_process(controller, action, results, config), to: ControllerCallbacks
end