diff --git a/lib/accounts/user.ex b/lib/accounts/user.ex index 1547ffe..749740d 100644 --- a/lib/accounts/user.ex +++ b/lib/accounts/user.ex @@ -190,8 +190,9 @@ defmodule Mv.Accounts.User do changeset |> Ash.Changeset.change_attribute(:oidc_id, oidc_id) # Update email if it differs from OIDC provider + # change_attribute/3 already checks if value matches existing value |> then(fn cs -> - if new_email && to_string(cs.data.email) != new_email do + if new_email do Ash.Changeset.change_attribute(cs, :email, new_email) else cs diff --git a/lib/accounts/user/validations/oidc_email_collision.ex b/lib/accounts/user/validations/oidc_email_collision.ex index ca633ee..041647a 100644 --- a/lib/accounts/user/validations/oidc_email_collision.ex +++ b/lib/accounts/user/validations/oidc_email_collision.ex @@ -69,13 +69,11 @@ defmodule Mv.Accounts.User.Validations.OidcEmailCollision do # User exists with this email - check if it's an upsert or registration is_upsert = not is_nil(existing_oidc_user) - handle_existing_user( - user_with_email, - new_oidc_id, - user_info, - is_upsert, - existing_oidc_user - ) + if is_upsert do + handle_upsert_scenario(user_with_email, user_info, existing_oidc_user) + else + handle_create_scenario(user_with_email, new_oidc_id, user_info) + end {:error, error} -> # Database error - log for debugging but don't expose internals to user @@ -84,20 +82,6 @@ defmodule Mv.Accounts.User.Validations.OidcEmailCollision do end end - defp handle_existing_user( - user_with_email, - new_oidc_id, - user_info, - is_upsert, - existing_oidc_user - ) do - if is_upsert do - handle_upsert_scenario(user_with_email, user_info, existing_oidc_user) - else - handle_create_scenario(user_with_email, new_oidc_id, user_info) - end - end - # Handle email update for existing OIDC user defp handle_upsert_scenario(user_with_email, user_info, existing_oidc_user) do cond do