diff --git a/aleksis/core/util/middlewares.py b/aleksis/core/util/middlewares.py
index 8a5990939a99a3bf46519cbef066e6d22692245f..46067bb15bbfdbeb50d511efcfa9ff77521901c2 100644
--- a/aleksis/core/util/middlewares.py
+++ b/aleksis/core/util/middlewares.py
@@ -28,16 +28,20 @@ class EnsurePersonMiddleware:
                 and request.user.first_name
                 and request.user.last_name
             ):
-                person, created = Person.objects.get_or_create(
-                    email=request.user.email,
-                    defaults={
-                        "first_name": request.user.first_name,
-                        "last_name": request.user.last_name,
-                    },
-                )
-                if prefs.get("account__auto_create_person") or not created:
+                if prefs.get("account__auto_create_person"):
+                    person, created = Person.objects.get_or_create(
+                        email=request.user.email,
+                        defaults={
+                            "first_name": request.user.first_name,
+                            "last_name": request.user.last_name,
+                        },
+                    )
                     person.user = request.user
-                    person.save()
+                else:
+                    person = Person.objects.filter(email=request.user.email).first()
+                    if person:
+                        person.user = request.user
+                        person.save()
 
         if request.user.is_superuser and not has_person(request):
             # Super-users get a dummy person linked