diff --git a/src/djangooidc/backends.py b/src/djangooidc/backends.py index ce6b3acd3..d4df7aa50 100644 --- a/src/djangooidc/backends.py +++ b/src/djangooidc/backends.py @@ -46,8 +46,19 @@ class OpenIdConnectBackend(ModelBackend): # defaults _will_ be updated, these are not fallbacks "defaults": openid_data, } - user, created = UserModel.objects.update_or_create(**args) - if created: + + user, created = UserModel.objects.get_or_create(**args) + + if not created: + # User already exists, update other fields without overwriting first_name and last_name + # overwrite first_name and last_name if not empty string + for key, value in args["defaults"].items(): + # Check if the key is not first_name or last_name or value is not empty string + if key not in ['first_name', 'last_name'] or value != "": + setattr(user, key, value) + user.save() + else: + # If user is created, configure the user user = self.configure_user(user, **kwargs) else: try: diff --git a/src/djangooidc/views.py b/src/djangooidc/views.py index 3a5c5fd20..7efb576da 100644 --- a/src/djangooidc/views.py +++ b/src/djangooidc/views.py @@ -83,9 +83,7 @@ def login_callback(request): user_in_db = User.objects.get(username=userinfo["sub"]) if user_in_db: - logger.info(f"This user exists in the DB (before authenticate): {user_in_db.first_name}") - userinfo["given_name"] = user_in_db.first_name - userinfo["family_name"] = user_in_db.last_name + logger.info(f"This user exists in the DB (before authenticate): {user_in_db.first_name} {user_in_db.last_name}") except: pass