Packages
guard
0.11.1
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.Jwt.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.Jwt.revoke(claims)
_ ->
nil
end
conn
|> json(%{ok: true})
end
def switch_user(conn, %{"id" => id}) do
user = Guard.Users.get!(id)
process_session(conn, Authenticator.switch_user(conn, user))
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