Packages
pow
1.0.1
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/extensions/email_confirmation/plug.ex
defmodule PowEmailConfirmation.Plug do
@moduledoc """
Plug helper methods.
"""
alias Plug.Conn
alias Pow.Plug
alias PowEmailConfirmation.Ecto.Context
@doc """
Confirms the e-mail for the user found by the provided confirmation token.
If successful, and a session exists, the session will be regenerated.
"""
@spec confirm_email(Conn.t(), binary()) :: {:ok, map(), Conn.t()} | {:error, map(), Conn.t()}
def confirm_email(conn, token) do
config = Plug.fetch_config(conn)
token
|> Context.get_by_confirmation_token(config)
|> maybe_confirm_email(conn, config)
end
defp maybe_confirm_email(nil, conn, _config) do
{:error, nil, conn}
end
defp maybe_confirm_email(user, conn, config) do
user
|> Context.confirm_email(config)
|> case do
{:error, changeset} -> {:error, changeset, conn}
{:ok, user} -> {:ok, user, maybe_renew_conn(conn, user, config)}
end
end
defp maybe_renew_conn(conn, %{id: user_id} = user, config) do
case Plug.current_user(conn, config) do
%{id: ^user_id} -> Plug.get_mod(config).do_create(conn, user, config)
_any -> conn
end
end
end