59 lines
2.2 KiB
Elixir
59 lines
2.2 KiB
Elixir
defmodule <%= inspect context.web_module %>.<%= inspect Module.concat(schema.web_namespace, schema.alias) %>ResetPasswordController do
|
|
use <%= inspect context.web_module %>, :controller
|
|
|
|
alias <%= inspect context.module %>
|
|
|
|
plug :get_<%= schema.singular %>_by_reset_password_token when action in [:edit, :update]
|
|
|
|
def new(conn, _params) do
|
|
render(conn, :new)
|
|
end
|
|
|
|
def create(conn, %{"<%= schema.singular %>" => %{"email" => email}}) do
|
|
if <%= schema.singular %> = <%= inspect context.alias %>.get_<%= schema.singular %>_by_email(email) do
|
|
<%= inspect context.alias %>.deliver_<%= schema.singular %>_reset_password_instructions(
|
|
<%= schema.singular %>,
|
|
&url(~p"<%= schema.route_prefix %>/reset_password/#{&1}")
|
|
)
|
|
end
|
|
|
|
conn
|
|
|> put_flash(
|
|
:info,
|
|
"If your email is in our system, you will receive instructions to reset your password shortly."
|
|
)
|
|
|> redirect(to: ~p"/")
|
|
end
|
|
|
|
def edit(conn, _params) do
|
|
render(conn, :edit, changeset: <%= inspect context.alias %>.change_<%= schema.singular %>_password(conn.assigns.<%= schema.singular %>))
|
|
end
|
|
|
|
# Do not log in the <%= schema.singular %> after reset password to avoid a
|
|
# leaked token giving the <%= schema.singular %> access to the account.
|
|
def update(conn, %{"<%= schema.singular %>" => <%= schema.singular %>_params}) do
|
|
case <%= inspect context.alias %>.reset_<%= schema.singular %>_password(conn.assigns.<%= schema.singular %>, <%= schema.singular %>_params) do
|
|
{:ok, _} ->
|
|
conn
|
|
|> put_flash(:info, "Password reset successfully.")
|
|
|> redirect(to: ~p"<%= schema.route_prefix %>/log_in")
|
|
|
|
{:error, changeset} ->
|
|
render(conn, :edit, changeset: changeset)
|
|
end
|
|
end
|
|
|
|
defp get_<%= schema.singular %>_by_reset_password_token(conn, _opts) do
|
|
%{"token" => token} = conn.params
|
|
|
|
if <%= schema.singular %> = <%= inspect context.alias %>.get_<%= schema.singular %>_by_reset_password_token(token) do
|
|
conn |> assign(:<%= schema.singular %>, <%= schema.singular %>) |> assign(:token, token)
|
|
else
|
|
conn
|
|
|> put_flash(:error, "Reset password link is invalid or it has expired.")
|
|
|> redirect(to: ~p"/")
|
|
|> halt()
|
|
end
|
|
end
|
|
end
|