From 07170548510be3cfb738785b7fe22532e9abae27 Mon Sep 17 00:00:00 2001 From: SimpleTest Date: Thu, 23 Jul 2026 03:24:47 +0300 Subject: [PATCH] fix: distinguish magic-link login from confirmation --- .../controllers/user_session_controller.ex | 15 ++++++++++----- .../controllers/user_session_controller_test.exs | 5 ++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/who_need_help_web/controllers/user_session_controller.ex b/lib/who_need_help_web/controllers/user_session_controller.ex index 58ee43b..4ab7e2a 100644 --- a/lib/who_need_help_web/controllers/user_session_controller.ex +++ b/lib/who_need_help_web/controllers/user_session_controller.ex @@ -24,16 +24,21 @@ defmodule WhoNeedHelpWeb.UserSessionController do end # 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 - info = - case params do - %{"_action" => "confirmed"} -> gettext("User confirmed successfully.") - _ -> gettext("Welcome back!") + was_confirmed? = + case Accounts.get_user_by_magic_link_token(token) do + %Accounts.User{confirmed_at: confirmed_at} -> not is_nil(confirmed_at) + _missing_or_invalid -> false end case Accounts.login_user_by_magic_link(token) do {:ok, {user, _expired_tokens}} -> + info = + if was_confirmed?, + do: gettext("Welcome back!"), + else: gettext("User confirmed successfully.") + conn |> put_flash(:info, info) |> maybe_connect_pending_google(user) diff --git a/test/who_need_help_web/controllers/user_session_controller_test.exs b/test/who_need_help_web/controllers/user_session_controller_test.exs index 02faf9b..ab0af7a 100644 --- a/test/who_need_help_web/controllers/user_session_controller_test.exs +++ b/test/who_need_help_web/controllers/user_session_controller_test.exs @@ -208,11 +208,14 @@ defmodule WhoNeedHelpWeb.UserSessionControllerTest do conn = post(conn, ~p"/users/log-in", %{ - "user" => %{"token" => token} + "user" => %{"token" => token}, + "_action" => "confirmed" }) assert get_session(conn, :user_token) 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 conn = get(conn, ~p"/")