Packages
pow
0.1.0-alpha
1.0.39
1.0.38
1.0.37
1.0.36
1.0.35
1.0.34
1.0.33
1.0.32
1.0.31
1.0.30
1.0.29
1.0.28
1.0.27
1.0.26
1.0.25
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.1.0-rc.1
0.1.0-alpha.8
0.1.0-alpha.7
retired
0.1.0-alpha.6
0.1.0-alpha.5
0.1.0-alpha.4
0.1.0-alpha.3
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha
Robust user authentication solution
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/pow/plug/base.ex
defmodule Pow.Plug.Base do
@moduledoc """
This plug macro will set the :pow_config key, and attempt to fetch and assign
a user in the connection, if it has not already been assigned.
You can use this to build your own pow plug:
defmodule MyAppWeb.Pow.Plug do
use Pow.Plug.Base
def fetch(conn, config) do
# Fetch user from conn
end
def create(conn, user, config) do
# Create new user auth in conn
end
def delete(conn, config) do
# Delete user auth from conn
end
The user will be assigned automatically in any of the operations.
end
"""
alias Plug.Conn
alias Pow.Config
@callback init(Config.t()) :: Config.t()
@callback call(Conn.t(), Config.t()) :: Conn.t()
@callback fetch(Conn.t(), Config.t()) :: map() | nil
@callback create(Conn.t(), map(), Config.t()) :: Conn.t()
@callback delete(Conn.t(), Config.t()) :: Conn.t()
defmacro __using__(_opts) do
quote do
alias Pow.Plug.Base
@behaviour Base
def init(config), do: config
def call(conn, config) do
config = Pow.Config.put(config, :mod, __MODULE__)
conn = Pow.Plug.put_config(conn, config)
conn
|> Pow.Plug.current_user()
|> maybe_fetch_user(conn)
end
@spec do_fetch(Conn.t()) :: Conn.t()
def do_fetch(conn) do
config = fetch_config(conn)
case fetch(conn, config) do
nil -> conn
user -> assign_user(conn, user, config)
end
end
@spec do_create(Conn.t(), map()) :: Conn.t()
def do_create(conn, user) do
config = fetch_config(conn)
conn
|> create(user, config)
|> assign_user(user, config)
end
@spec do_delete(Conn.t()) :: Conn.t()
def do_delete(conn) do
config = fetch_config(conn)
conn
|> delete(config)
|> assign_user(nil, config)
end
defp maybe_fetch_user(nil, conn), do: do_fetch(conn)
defp maybe_fetch_user(_user, conn), do: conn
defp fetch_config(conn),
do: Pow.Plug.fetch_config(conn)
defp assign_user(conn, user, config),
do: Pow.Plug.assign_current_user(conn, user, config)
defoverridable Base
end
end
end