Fix subsequent SAML sign ins

This commit is contained in:
Drew Blessing 2016-06-16 15:11:09 -05:00
parent 98cede7ebe
commit 938f2b9979
2 changed files with 18 additions and 2 deletions

View File

@ -74,7 +74,7 @@ module Gitlab
if user
# Case when a LDAP user already exists in Gitlab. Add the OAuth identity to existing account.
log.info "LDAP account found for user #{user.username}. Building new #{auth_hash.provider} identity."
user.identities.build(extern_uid: auth_hash.uid, provider: auth_hash.provider)
user.identities.find_or_initialize_by(extern_uid: auth_hash.uid, provider: auth_hash.provider)
else
log.info "No existing LDAP account was found in GitLab. Checking for #{auth_hash.provider} account."
user = find_by_uid_and_provider

View File

@ -164,7 +164,14 @@ describe Gitlab::Saml::User, lib: true do
end
context 'and LDAP user has an account already' do
let!(:existing_user) { create(:omniauth_user, email: 'john@mail.com', extern_uid: 'uid=user1,ou=People,dc=example', provider: 'ldapmain', username: 'john') }
before do
create(:omniauth_user,
email: 'john@mail.com',
extern_uid: 'uid=user1,ou=People,dc=example',
provider: 'ldapmain',
username: 'john')
end
it 'adds the omniauth identity to the LDAP account' do
saml_user.save
@ -177,6 +184,15 @@ describe Gitlab::Saml::User, lib: true do
{ provider: 'saml', extern_uid: uid }
])
end
it 'saves successfully on subsequent tries, when both identities are present' do
saml_user.save
local_saml_user = described_class.new(auth_hash)
local_saml_user.save
expect(local_saml_user.gl_user).to be_valid
expect(local_saml_user.gl_user).to be_persisted
end
end
context 'user has SAML user, and wants to add their LDAP identity' do