OIDC handling and linking closes #171 #192
2 changed files with 7 additions and 22 deletions
|
|
@ -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 ->
|
||||
|
moritz marked this conversation as resolved
Outdated
rafael
commented
Is the equality check needed? From the ash docs:
Is the equality check needed? From the [ash docs](https://hexdocs.pm/ash/Ash.Changeset.html#change_attribute/3):
> Adds a change to the changeset, **unless the value matches the existing value.**
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
moritz marked this conversation as resolved
Outdated
rafael
commented
Removing this function and inlining its code instead would be shorter and could be more readable, even at the cost of an extra level of indentation above. Removing this function and inlining its code instead would be shorter and could be more readable, even at the cost of an extra level of indentation above.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue
Does this do anything? it looks like
oidc_idis the same value we're getting out of the changeset a few lines above.On line 184, oidc_id is taken out of the changeset as an argument, but on line 191 it is set as an attribute. These are two different things in Ash:
Arguments are temporary values that are passed to the action
Attributes are the persisted fields in the data model So the code transforms the argument into an attribute that is stored in the database.