diff --git a/src/api/views/mixins.py b/src/api/views/mixins.py
index 8cc93edfcafef1aae7d8a3dc5578cfd40ae7f8a9..46c9302450d1ce62942b9217e02672d560521884 100644
--- a/src/api/views/mixins.py
+++ b/src/api/views/mixins.py
@@ -39,10 +39,8 @@ class ConferenceSlugMixin(PermissionRequiredMixin):
     @property
     def conferencemember(self):
         if self._conferencemember is None:
-            try:
-                self._conferencemember = ConferenceMember.objects.get(conference=self.conference, user=self.request.user)
-            except ConferenceMember.DoesNotExist:
-                return None
+            self._conferencemember = ConferenceMember.get_member(conference=self.conference, user=self.request.user)
+            return self._conferencemember if self._conferencemember.is_authenticated else None
         return self._conferencemember
 
 
diff --git a/src/backoffice/views/mixins.py b/src/backoffice/views/mixins.py
index 0b5e6867b95cc05e5165ec11ad1b00bb2cd416bf..c1acd632730e309e82fadaf27f067229f50b9883 100644
--- a/src/backoffice/views/mixins.py
+++ b/src/backoffice/views/mixins.py
@@ -52,18 +52,11 @@ class ConferenceRequiredMixin(PermissionRequiredMixin):
     @property
     def conferencemember(self):
         if self._conferencemember is None:
-            if not self.request.user.is_authenticated:
-                return ConferenceMember.get_anonymous_member(self.conference)
-
-            try:
-                self._conferencemember = (
-                    ConferenceMember.objects.select_related('user')
-                    .prefetch_related('user__groups', 'user__user_permissions', 'permission_groups')
-                    .get(conference=self.conference, user=self.request.user)
-                )
-            except ConferenceMember.DoesNotExist:
-                self._conferencemember = ConferenceMember.get_anonymous_member(self.conference)
-
+            self._conferencemember = ConferenceMember.get_member(
+                conference=self.conference,
+                user=self.request.user,
+                prefetch_user=True,
+            )
         return self._conferencemember
 
     @property
diff --git a/src/core/models/conference.py b/src/core/models/conference.py
index 51b231760532cb529ba542e60f97246885b0d474..8aa080ee902193dc7e8026f7a466376f400c1e01 100644
--- a/src/core/models/conference.py
+++ b/src/core/models/conference.py
@@ -114,8 +114,19 @@ class ConferenceMember(models.Model):
         all_permissions = self.user.get_all_permissions() | self.get_permission_groups_permissions()
         return all_permissions
 
+    @property
+    def is_authenticated(self):
+        return self.user.is_authenticated
+
     @classmethod
-    def get_member(cls, conference: 'Conference', *, user: PlatformUser | None = None, member: 'ConferenceMember | None' = None) -> 'ConferenceMember':
+    def get_member(
+        cls,
+        conference: 'Conference',
+        *,
+        user: PlatformUser | None = None,
+        member: 'ConferenceMember | None' = None,
+        prefetch_user: bool = False,
+    ) -> 'ConferenceMember':
         if member is None and user is None:
             raise ValueError('Either user or member must be given.')
         if member and user and member.user != user:
@@ -127,7 +138,10 @@ class ConferenceMember(models.Model):
         if not user.is_authenticated:
             return cls.get_anonymous_member(conference, user)
         try:
-            return cls.objects.get(conference=conference, user=user)
+            qs = cls.objects.all()
+            if prefetch_user:
+                qs = qs.select_related('user').prefetch_related('user__groups', 'user__user_permissions', 'permission_groups')
+            return qs.get(conference=conference, user=user)
         except cls.DoesNotExist:
             return cls.get_anonymous_member(conference, user)
 
@@ -146,7 +160,6 @@ class ConferenceMember(models.Model):
             def has_perms(self, *perms: str, require_all: bool = True, require_staff: bool = False) -> bool:
                 return False
 
-            is_authenticated = False
             conference = conf
 
             def save(self, *args, **kwargs):
diff --git a/src/core/models/users.py b/src/core/models/users.py
index 169a80bbc29f43ab44ded914d4a1221d666e662b..495500edd4384f407c78a27d4d3c6e7b7db3b7f6 100644
--- a/src/core/models/users.py
+++ b/src/core/models/users.py
@@ -230,7 +230,7 @@ class PlatformUser(AbstractUser):
             is_authenticated = False
 
             def save(self, *args, **kwargs):
-                raise Exception
+                raise TypeError('Cannot save an anonymous user.')
 
         return AnonUser()