From 333ca2e7c02160ee28b714feda3fac4d0e968437 Mon Sep 17 00:00:00 2001 From: quartz55 Date: Sat, 25 Feb 2023 16:33:58 +0000 Subject: [PATCH] fix: respect `identity_relationship_user_id_attribute` on `Strategy.OAuth2.IdentityChange` --- .../strategies/oauth2/identity_change.ex | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/lib/ash_authentication/strategies/oauth2/identity_change.ex b/lib/ash_authentication/strategies/oauth2/identity_change.ex index 6360fe0..5487f19 100644 --- a/lib/ash_authentication/strategies/oauth2/identity_change.ex +++ b/lib/ash_authentication/strategies/oauth2/identity_change.ex @@ -29,20 +29,22 @@ defmodule AshAuthentication.Strategy.OAuth2.IdentityChange do defp do_change(changeset, strategy) do changeset |> Changeset.after_action(fn changeset, user -> - strategy.identity_resource - |> UserIdentity.Actions.upsert(%{ - user_info: Changeset.get_argument(changeset, :user_info), - oauth_tokens: Changeset.get_argument(changeset, :oauth_tokens), - strategy: Strategy.name(strategy), - user_id: user.id - }) - |> case do - {:ok, _identity} -> - user - |> changeset.api.load(strategy.identity_relationship_name) - - {:error, reason} -> - {:error, reason} + with {:ok, user_id_attribute_name} <- + strategy.identity_resource + |> UserIdentity.Info.user_identity_user_id_attribute_name(), + {:ok, _identity} <- + strategy.identity_resource + |> UserIdentity.Actions.upsert(%{ + user_info: Changeset.get_argument(changeset, :user_info), + oauth_tokens: Changeset.get_argument(changeset, :oauth_tokens), + strategy: Strategy.name(strategy), + "#{user_id_attribute_name}": user.id + }) do + user + |> changeset.api.load(strategy.identity_relationship_name) + else + :error -> :error + {:error, reason} -> {:error, reason} end end) end