diff --git a/app/services/username_checker_service.rb b/app/services/username_checker_service.rb index 71c6d9a2b79..9584cc63ada 100644 --- a/app/services/username_checker_service.rb +++ b/app/services/username_checker_service.rb @@ -11,7 +11,12 @@ class UsernameCheckerService check_username_with_hub_server(username, email) end elsif email and SiteSetting.call_discourse_hub? - {suggestion: DiscourseHub.nickname_for_email(email)} + username_from_hub = DiscourseHub.nickname_for_email(email) + if username_from_hub && User.username_available?(username_from_hub) + {suggestion: username_from_hub} + else + {suggestion: nil} + end end end diff --git a/spec/services/username_checker_service_spec.rb b/spec/services/username_checker_service_spec.rb index 7f802ec6b01..0d3fdfe2de4 100644 --- a/spec/services/username_checker_service_spec.rb +++ b/spec/services/username_checker_service_spec.rb @@ -95,6 +95,14 @@ describe UsernameCheckerService do DiscourseHub.stubs(:nickname_for_email).returns('vincent') result.should == {suggestion: 'vincent'} end + + it 'match found for email, but username is taken' do + # This case can happen when you've already signed up on the site, + # or enforce_global_nicknames used to be disabled. + DiscourseHub.stubs(:nickname_for_email).returns('taken') + User.stubs(:username_available?).with('taken').returns(false) + result.should == {suggestion: nil} + end end context 'username is nil' do