fix: distinguish magic-link login from confirmation

This commit is contained in:
SimpleTest 2026-07-23 03:24:47 +03:00
parent 7ce052d0a1
commit 0717054851
2 changed files with 14 additions and 6 deletions

View File

@ -24,16 +24,21 @@ defmodule WhoNeedHelpWeb.UserSessionController do
end end
# magic link login # magic link login
def create(conn, %{"user" => %{"token" => token} = user_params} = params) def create(conn, %{"user" => %{"token" => token} = user_params})
when is_binary(token) do when is_binary(token) do
info = was_confirmed? =
case params do case Accounts.get_user_by_magic_link_token(token) do
%{"_action" => "confirmed"} -> gettext("User confirmed successfully.") %Accounts.User{confirmed_at: confirmed_at} -> not is_nil(confirmed_at)
_ -> gettext("Welcome back!") _missing_or_invalid -> false
end end
case Accounts.login_user_by_magic_link(token) do case Accounts.login_user_by_magic_link(token) do
{:ok, {user, _expired_tokens}} -> {:ok, {user, _expired_tokens}} ->
info =
if was_confirmed?,
do: gettext("Welcome back!"),
else: gettext("User confirmed successfully.")
conn conn
|> put_flash(:info, info) |> put_flash(:info, info)
|> maybe_connect_pending_google(user) |> maybe_connect_pending_google(user)

View File

@ -208,11 +208,14 @@ defmodule WhoNeedHelpWeb.UserSessionControllerTest do
conn = conn =
post(conn, ~p"/users/log-in", %{ post(conn, ~p"/users/log-in", %{
"user" => %{"token" => token} "user" => %{"token" => token},
"_action" => "confirmed"
}) })
assert get_session(conn, :user_token) assert get_session(conn, :user_token)
assert redirected_to(conn) == ~p"/" assert redirected_to(conn) == ~p"/"
assert Phoenix.Flash.get(conn.assigns.flash, :info) =~ "Welcome back!"
refute Phoenix.Flash.get(conn.assigns.flash, :info) =~ "User confirmed successfully."
# Now do a logged in request and assert on the menu # Now do a logged in request and assert on the menu
conn = get(conn, ~p"/") conn = get(conn, ~p"/")