Packages
pow
1.0.4
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/phoenix/router.ex
defmodule Pow.Phoenix.Router do
@moduledoc """
Handles Phoenix routing for Pow.
## Usage
Configure `lib/my_project_web/router.ex` the following way:
defmodule MyAppWeb.Router do
use MyAppWeb, :router
use Pow.Phoenix.Router
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
end
scope "/" do
pipe_through :browser
pow_routes()
end
# ...
end
"""
@doc false
defmacro __using__(_opts \\ []) do
quote do
import unquote(__MODULE__), only: [pow_routes: 0, pow_scope: 1, pow_session_routes: 0, pow_registration_routes: 0]
end
end
@doc """
Pow router macro.
Use this macro to define the Pow routes.
## Example
scope "/" do
pow_routes()
end
"""
defmacro pow_routes do
quote do
pow_session_routes()
pow_registration_routes()
end
end
@doc false
defmacro pow_scope(do: context) do
quote do
unquote(__MODULE__).validate_scope!(@phoenix_router_scopes)
scope "/", Pow.Phoenix, as: "pow" do
unquote(context)
end
end
end
@doc false
defmacro pow_session_routes do
quote location: :keep do
pow_scope do
resources "/session", SessionController, singleton: true, only: [:new, :create, :delete]
end
end
end
@doc false
defmacro pow_registration_routes do
quote location: :keep do
pow_scope do
resources "/registration", RegistrationController, singleton: true, only: [:new, :create, :edit, :update, :delete]
end
end
end
@spec validate_scope!(atom()) :: :ok | no_return
def validate_scope!([]), do: :ok
def validate_scope!(stack) do
modules =
stack
|> Enum.map(& &1.alias)
|> Enum.reject(&is_nil/1)
case modules do
[] ->
:ok
modules ->
raise ArgumentError,
"""
Pow routes should not be defined inside scopes with aliases: #{inspect Module.concat(modules)}
Please consider separating your scopes:
scope "/" do
pipe_through :browser
pow_routes()
end
scope "/", #{inspect Module.concat(modules)} do
pipe_through :browser
get "/", PageController, :index
end
"""
end
end
defmodule Helpers do
@moduledoc false
alias Plug.Conn
alias Pow.Phoenix.{RegistrationController, SessionController}
@spec pow_session_path(Conn.t(), :new) :: binary()
def pow_session_path(conn, :new) do
SessionController.routes(conn).session_path(conn, :new)
end
@spec pow_registration_path(Conn.t(), :new) :: binary()
def pow_registration_path(conn, :new) do
RegistrationController.routes(conn).registration_path(conn, :new)
end
end
end