frenzy/lib/frenzy_web/plug/authenticate.ex

34 lines
912 B
Elixir

defmodule FrenzyWeb.Plug.Authenticate do
import Plug.Conn
alias Frenzy.{Repo, User}
alias FrenzyWeb.Router.Helpers, as: Routes
alias FrenzyWeb.Endpoint
def init(opts), do: opts
def call(conn, _opts) do
user_token = get_session(conn, :user_token)
case Phoenix.Token.verify(Endpoint, "user token", user_token, max_age: 24 * 60 * 60) do
{:error, _reason} ->
conn
|> Phoenix.Controller.redirect(
to: Routes.login_path(Endpoint, :login, continue: Phoenix.Controller.current_path(conn))
)
|> halt()
{:ok, user_id} ->
case Repo.get(User, user_id) do
nil ->
conn
|> Phoenix.Controller.redirect(to: Routes.login_path(Endpoint, :login))
|> halt()
user ->
user = Repo.preload(user, groups: [:feeds])
assign(conn, :user, user)
end
end
end
end