defmodule ComponentsElixirWeb.LoginLive do use ComponentsElixirWeb, :live_view alias ComponentsElixir.Auth @impl true def mount(_params, session, socket) do # If already authenticated, redirect to components if Map.get(session, "authenticated") do {:ok, socket |> push_navigate(to: ~p"/")} else {:ok, socket |> assign(:session, session) |> assign(:error_message, nil) |> assign(:form, to_form(%{"password" => ""}))} end end @impl true def handle_event("login", %{"password" => password}, socket) do case Auth.authenticate(password) do {:ok, :authenticated} -> # Store authentication in a cookie that the server can read {:noreply, socket |> put_flash(:info, "Successfully logged in!") |> push_navigate(to: "/login/authenticate?password=#{URI.encode(password)}")} {:error, :invalid_credentials} -> {:noreply, socket |> assign(:error_message, "Invalid password") |> assign(:form, to_form(%{"password" => ""}))} end end @impl true def render(assigns) do ~H"""
Please enter your password to continue