diff --git a/lib/auth/result.rb b/lib/auth/result.rb index 939e4eb7f54..397a373f80e 100644 --- a/lib/auth/result.rb +++ b/lib/auth/result.rb @@ -83,8 +83,8 @@ class Auth::Result def apply_user_attributes! change_made = false - if (SiteSetting.auth_overrides_username? || overrides_username) && username.present? - change_made = UsernameChanger.override(user, username) + if (SiteSetting.auth_overrides_username? || overrides_username) && (resolved_username = resolve_username).present? + change_made = UsernameChanger.override(user, resolved_username) end if (SiteSetting.auth_overrides_email || overrides_email || user&.email&.ends_with?(".invalid")) && @@ -213,6 +213,6 @@ class Auth::Result end end - UserNameSuggester.suggest(*username_suggester_attributes) + UserNameSuggester.suggest(*username_suggester_attributes, current_username: user&.username) end end diff --git a/spec/lib/auth/result_spec.rb b/spec/lib/auth/result_spec.rb index 6dd3d47a823..f63e57b2d5d 100644 --- a/spec/lib/auth/result_spec.rb +++ b/spec/lib/auth/result_spec.rb @@ -51,6 +51,15 @@ describe Auth::Result do expect(user.name).to eq(new_name) end + it "overrides username with suggested value if missing" do + SiteSetting.auth_overrides_username = true + + result.username = nil + result.apply_user_attributes! + + expect(user.username).to eq("New_Name") + end + it "updates the user's email if currently invalid" do user.update!(email: "someemail@discourse.org") expect { result.apply_user_attributes! }.not_to change { user.email }