Current section
Files
Jump to
Current section
Files
priv/templates/auth_live_hooks.eex
defmodule <%= inspect @module %> do
@moduledoc """
LiveView `on_mount` hooks generated by Caravela from <%= inspect @domain_module %>.
Regenerate with `mix caravela.gen.auth <%= inspect @domain_module %>`.
Custom code placed below the `# --- CUSTOM ---` marker is preserved.
Wire up in a LiveView:
on_mount <%= inspect @module %>, :require_auth
or
on_mount <%= inspect @module %>, :fetch_user
"""
import Phoenix.Component, only: [assign: 3]
alias <%= inspect @auth_module %>, as: Auth
def on_mount(:require_auth, _params, session, socket) do
case Auth.get_user_by_session(session["user_token"]) do
nil ->
socket = Phoenix.LiveView.redirect(socket, to: "/auth/login")
{:halt, socket}
user ->
{:cont, assign(socket, :current_user, user)}
end
end
def on_mount(:fetch_user, _params, session, socket) do
user =
case session["user_token"] do
nil -> nil
token -> Auth.get_user_by_session(token)
end
{:cont, assign(socket, :current_user, user)}
end
def on_mount({:require_role, roles}, _params, session, socket) when is_list(roles) do
case Auth.get_user_by_session(session["user_token"]) do
nil ->
{:halt, Phoenix.LiveView.redirect(socket, to: "/auth/login")}
user ->
if user.role in roles do
{:cont, assign(socket, :current_user, user)}
else
{:halt, Phoenix.LiveView.redirect(socket, to: "/")}
end
end
end
# --- CUSTOM :auth_live_hooks ---
# --- END :auth_live_hooks ---
<%= @custom_marker %>