Verify user on liveview mount

This commit is contained in:
João Gilberto Balsini Moura 2020-09-14 11:17:47 -03:00 committed by Joao Gilberto Balsini Moura
parent 8fbeabc208
commit 626063ee76
3 changed files with 32 additions and 1 deletions

View file

@ -48,6 +48,7 @@ defmodule RealEstateWeb do
layout: {RealEstateWeb.LayoutView, "live.html"}
unquote(view_helpers())
import RealEstateWeb.LiveHelpers
end
end

View file

@ -0,0 +1,29 @@
defmodule RealEstateWeb.LiveHelpers do
import Phoenix.LiveView
alias RealEstate.Accounts
alias RealEstate.Accounts.User
alias RealEstateWeb.Router.Helpers, as: Routes
def assign_defaults(session, socket) do
socket =
assign_new(socket, :current_user, fn ->
find_current_user(session)
end)
case socket.assigns.current_user do
%User{} ->
socket
_other ->
socket
|> put_flash(:error, "You must log in to access this page.")
|> redirect(to: Routes.user_session_path(socket, :new))
end
end
defp find_current_user(session) do
with user_token when not is_nil(user_token) <- session["user_token"],
%User{} = user <- Accounts.get_user_by_session_token(user_token),
do: user
end
end

View file

@ -2,7 +2,8 @@ defmodule RealEstateWeb.PageLive do
use RealEstateWeb, :live_view
@impl true
def mount(_params, _session, socket) do
def mount(_params, session, socket) do
socket = assign_defaults(session, socket)
{:ok, assign(socket, query: "", results: %{})}
end