Packages
guard
0.8.0
0.19.1
0.19.0
0.18.0
0.17.2
0.17.1
0.17.0
0.16.3
0.16.2
0.16.1
0.16.0
0.15.3
0.15.2
0.15.1
0.15.0
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
0.13.0
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.0
0.7.1
0.7.0
0.6.1
0.6.0
0.5.0
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
Useful package for dealing with user authentication and signup
Current section
Files
Jump to
Current section
Files
lib/guard/controller/session.ex
defmodule Guard.Controller.Session do
use Phoenix.Controller
import Guard.Controller, only: [send_error: 2, send_error: 3]
alias Guard.{Session, Authenticator}
def call(conn, opts) do
try do
super(conn, opts)
rescue
error -> send_error(conn, error, :internal_server_error)
end
end
defp process_session(conn, {:ok, user}) do
case Guard.Authenticator.generate_access_claim(user) do
{:ok, jwt, _full_claims} ->
conn
|> put_status(:created)
|> json(%{jwt: jwt, user: user, perms: user.perms})
{:error, error} ->
send_error(conn, error)
end
end
defp process_session(conn, {:error, message}) do
conn
|> put_status(:unauthorized)
|> json(%{error: message})
end
defp process_session(conn, {:ok, jwt, claims}) do
case Guard.Guardian.resource_from_claims(claims) do
{:ok, user} ->
root_user = claims["usr"]
extra = if root_user do
%{root_user: root_user}
else
%{}
end
conn
|> put_status(:created)
|> json(Map.merge(%{jwt: jwt, user: user, perms: user.perms, root_user: root_user}, extra))
{:error, error} ->
send_error(conn, error)
end
end
def restore(conn, %{"token" => token}) do
process_session conn, Session.authenticate({:jwt, token})
end
def create(conn, %{"session" => session_params}) do
process_session conn, Session.authenticate(session_params)
end
def create(conn, params) do
process_session conn, Session.authenticate(conn, params)
end
def delete(conn, _) do
case Authenticator.current_claims(conn) do
{:ok, claims} -> conn
|> Guardian.Plug.current_token
|> Guard.Guardian.revoke(claims)
_ -> nil
end
conn
|> json(%{ok: true})
end
def switch_user(conn, %{"username" => username}) do
user = Guard.Users.get_by_username!(username)
process_session(conn, Authenticator.switch_user(conn, user))
end
def switch_user(conn, %{"mobile" => mobile}) do
user = Guard.Users.get_by_mobile!(mobile)
process_session(conn, Authenticator.switch_user(conn, user))
end
def switch_user(conn, %{"email" => email}) do
user = Guard.Users.get_by_email!(email)
process_session(conn, Authenticator.switch_user(conn, user))
end
def reset_user(conn, _params) do
process_session(conn, Authenticator.reset_user(conn))
end
end