ash_hq/lib/ash_hq_web/controllers/user_session_controller.ex
Zach Daniel 884de2d2d2 improvement: rework auth forms to liveview
improvement: better look and feel (not much better, though)
2022-08-15 21:23:59 -04:00

41 lines
1.1 KiB
Elixir

defmodule AshHqWeb.UserSessionController do
use AshHqWeb, :controller
alias AshHqWeb.UserAuth
def log_in(conn, %{"log_in" => %{"token" => token} = params}) do
token = Base.url_decode64!(token, padding: false)
UserAuth.log_in_with_token(conn, token, params["remember_me"] == "true", params["return_to"])
end
def log_in(conn, %{"log_in" => %{"email" => email, "password" => password} = params}) do
AshHq.Accounts.User
|> Ash.Query.for_read(:by_email_and_password, %{email: email, password: password},
authorize?: false
)
|> AshHq.Accounts.read_one()
|> case do
{:ok, nil} ->
redirect(conn, to: "/")
{:ok, user} ->
token = AshHqWeb.UserAuth.create_token_for_user(user)
UserAuth.log_in_with_token(
conn,
token,
params["remember_me"] == "true",
params["return_to"]
)
{:error, _} ->
redirect(conn, to: "/")
end
end
def delete(conn, _params) do
conn
|> put_flash(:info, "Logged out successfully.")
|> UserAuth.log_out_user()
end
end