Skip to content

Commit 83f3f82

Browse files
committed
fix: unintended account switch on authing with GitHub
1 parent 6a0c988 commit 83f3f82

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

lib/algora/accounts/accounts.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,10 +293,10 @@ defmodule Algora.Accounts do
293293

294294
primary_user =
295295
case {current_user, Repo.all(query)} do
296+
{current_user, _} when not is_nil(current_user) -> current_user
296297
{_, []} -> nil
297298
{_, [user]} -> user
298-
{nil, users} -> Enum.find(users, &(&1.provider == "github" and &1.provider_id == to_string(info["id"])))
299-
{user, users} -> Enum.find(users, &(&1.id == user.id))
299+
{_, users} -> Enum.find(users, &(&1.provider == "github" and &1.provider_id == to_string(info["id"])))
300300
end
301301

302302
case primary_user do

test/algora/accounts_test.exs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,21 @@ defmodule Algora.AccountsTest do
5454
assert identity.provider_token == token
5555
end
5656

57+
test "updates existing user when user is authed", %{
58+
github_info: github_info,
59+
emails: emails,
60+
token: token,
61+
primary_email: primary_email
62+
} do
63+
existing_user = insert!(:user, email: "[email protected]", display_name: "Existing User")
64+
65+
{:ok, updated_user} = Accounts.register_github_user(existing_user, primary_email, github_info, emails, token)
66+
67+
assert updated_user.id == existing_user.id
68+
assert updated_user.email == "[email protected]"
69+
assert updated_user.provider_login == "testuser"
70+
end
71+
5772
test "updates existing user when matching by GitHub ID", %{
5873
github_info: github_info,
5974
emails: emails,

0 commit comments

Comments
 (0)