From 4be6ac466a91eefe335c7e03d4499844204e6b2d Mon Sep 17 00:00:00 2001 From: Rohan Gupta Date: Wed, 21 Sep 2022 11:17:48 -0400 Subject: [PATCH 1/2] update emails on login --- backend/accounts/backends.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/backend/accounts/backends.py b/backend/accounts/backends.py index ea3fb21f..cb7df402 100644 --- a/backend/accounts/backends.py +++ b/backend/accounts/backends.py @@ -42,14 +42,21 @@ def authenticate(self, request, remote_user, shibboleth_attributes): ) # Add initial attributes on first log in + if created: - email = self.get_email(remote_user) - if email is None or email == "": - email = f"{shibboleth_attributes['username']}@upenn.edu" user.set_unusable_password() user.save() user = self.configure_user(request, user) - Email.objects.create(user=user, value=email, primary=True, verified=True) + + # Always update email + + email = self.get_email(remote_user) + if email is None or email == "": + email = f"{shibboleth_attributes['username']}@upenn.edu" + + Email.objects.update_or_create( + user=user, value=email, primary=True, verified=True + ) # Update fields if changed for key, value in shibboleth_attributes.items(): From 742071e017f1a6adaea7186c92eada99a0317dff Mon Sep 17 00:00:00 2001 From: Rohan Gupta Date: Wed, 21 Sep 2022 13:10:50 -0400 Subject: [PATCH 2/2] check old email and update that --- backend/accounts/backends.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/backend/accounts/backends.py b/backend/accounts/backends.py index cb7df402..899ca74a 100644 --- a/backend/accounts/backends.py +++ b/backend/accounts/backends.py @@ -54,9 +54,13 @@ def authenticate(self, request, remote_user, shibboleth_attributes): if email is None or email == "": email = f"{shibboleth_attributes['username']}@upenn.edu" - Email.objects.update_or_create( - user=user, value=email, primary=True, verified=True - ) + old_email = Email.objects.filter(user=user, primary=True).first() + + if old_email and old_email.value != email: + old_email.value = email + old_email.save() + elif not old_email: + Email.objects.create(user=user, value=email, primary=True, verified=True) # Update fields if changed for key, value in shibboleth_attributes.items():