44 lines
1.2 KiB
Elixir
44 lines
1.2 KiB
Elixir
defmodule MvWeb.LiveUserAuth do
|
|
@moduledoc """
|
|
Helpers for authenticating users in LiveViews.
|
|
"""
|
|
|
|
import Phoenix.Component
|
|
use MvWeb, :verified_routes
|
|
|
|
# This is used for nested liveviews to fetch the current user.
|
|
# To use, place the following at the top of that liveview:
|
|
# on_mount {MvWeb.LiveUserAuth, :current_user}
|
|
def on_mount(:current_user, _params, session, socket) do
|
|
return_to = session[:return_to]
|
|
socket =
|
|
socket
|
|
|> assign(:return_to, return_to)
|
|
|> AshAuthentication.Phoenix.LiveSession.assign_new_resources(session)
|
|
{:cont, session, socket}
|
|
end
|
|
|
|
def on_mount(:live_user_optional, _params, _session, socket) do
|
|
if socket.assigns[:current_user] do
|
|
{:cont, socket}
|
|
else
|
|
{:cont, assign(socket, :current_user, nil)}
|
|
end
|
|
end
|
|
|
|
def on_mount(:live_user_required, _params, _session, socket) do
|
|
if socket.assigns[:current_user] do
|
|
{:cont, socket}
|
|
else
|
|
{:halt, Phoenix.LiveView.redirect(socket, to: ~p"/sign-in")}
|
|
end
|
|
end
|
|
|
|
def on_mount(:live_no_user, _params, _session, socket) do
|
|
if socket.assigns[:current_user] do
|
|
{:halt, Phoenix.LiveView.redirect(socket, to: ~p"/")}
|
|
else
|
|
{:cont, assign(socket, :current_user, nil)}
|
|
end
|
|
end
|
|
end
|