diff --git a/api/config/settings/common.py b/api/config/settings/common.py index c0ff1e8283bb2286c2ab0cd5080a8911c228e65f..1976ddcab2d0740122963e0512ba4da198f8b117 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -327,7 +327,7 @@ SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https") # AUTHENTICATION CONFIGURATION # ------------------------------------------------------------------------------ AUTHENTICATION_BACKENDS = ( - "django.contrib.auth.backends.ModelBackend", + "funkwhale_api.users.auth_backends.ModelBackend", "allauth.account.auth_backends.AuthenticationBackend", ) SESSION_COOKIE_HTTPONLY = False diff --git a/api/funkwhale_api/users/auth_backends.py b/api/funkwhale_api/users/auth_backends.py new file mode 100644 index 0000000000000000000000000000000000000000..404b34f4d1d2efa35bf83c9178da163ac3a0110c --- /dev/null +++ b/api/funkwhale_api/users/auth_backends.py @@ -0,0 +1,17 @@ +from django.contrib.auth import backends, get_user_model + + +class ModelBackend(backends.ModelBackend): + def get_user(self, user_id): + """ + Select related to avoid two additional queries + """ + try: + user = ( + get_user_model() + ._default_manager.select_related("actor__domain") + .get(pk=user_id) + ) + except get_user_model().DoesNotExist: + return None + return user if self.user_can_authenticate(user) else None