Fix failed LDAP logins when nil user_id present
When a LDAP user signs in the for the first time and if there
is an Identity
object with user_id
of nil
, new users
will not be able to be register until that entry is cleared
because of the way identities are created:
- First, the User object is built but not saved, so it has no
id
. - Then,
user.identities.build(provider: 'ldapmain')
is called, but it does not have an associateduser_id
either. -
User#save
is called, but theIdentity
validation fails if an existing entry withuser_id
ofnil
already exists.
The uniqueness validation for nil
values doesn't make any sense in
this case. We should be enforcing this at the database level with a
foreign key constraint. To work around the issue we can validate
against the user instead, which does the right thing even when
the user isn't saved yet.
Edited by Stan Hu