Skip to content

Commit 0073d1d

Browse files
committed
If a user has an existing ORCID ID, and then associates a new ORCID ID, the existing ORCID ID should be removed/overwritten
1 parent e0bb595 commit 0073d1d

2 files changed

Lines changed: 8 additions & 3 deletions

File tree

api/users/views.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,10 @@ def post(self, request, *args, **kwargs):
755755
# 1. update user oauth, with pending status
756756
external_identity[external_id_provider][external_id] = 'LINK'
757757
if external_id_provider in user.external_identity:
758-
user.external_identity[external_id_provider].update(external_identity[external_id_provider])
758+
if external_id_provider == 'orcid':
759+
user.external_identity[external_id_provider] = external_identity[external_id_provider]
760+
else:
761+
user.external_identity[external_id_provider].update(external_identity[external_id_provider])
759762
else:
760763
user.external_identity.update(external_identity)
761764
if not user.accepted_terms_of_service and accepted_terms_of_service:
@@ -1153,7 +1156,6 @@ class ConfirmEmailView(generics.CreateAPIView):
11531156

11541157
def _process_external_identity(self, user, external_identity, service_url):
11551158
"""Handle all external_identity logic, including task enqueueing and url updates."""
1156-
11571159
provider = next(iter(external_identity))
11581160
if provider not in user.external_identity:
11591161
raise ValidationError('External-ID provider mismatch.')

framework/auth/views.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1097,7 +1097,10 @@ def external_login_email_post():
10971097
# 1. update user oauth, with pending status
10981098
external_identity[external_id_provider][external_id] = 'LINK'
10991099
if external_id_provider in user.external_identity:
1100-
user.external_identity[external_id_provider].update(external_identity[external_id_provider])
1100+
if external_id_provider == 'orcid':
1101+
user.external_identity[external_id_provider] = external_identity[external_id_provider]
1102+
else:
1103+
user.external_identity[external_id_provider].update(external_identity[external_id_provider])
11011104
else:
11021105
user.external_identity.update(external_identity)
11031106
if not user.accepted_terms_of_service and form.accepted_terms_of_service.data:

0 commit comments

Comments
 (0)