from mozilla_django_oidc.auth import OIDCAuthenticationBackend class KeycloakOIDCBackend(OIDCAuthenticationBackend): def create_user(self, claims): email = claims.get("email", "") user = self.UserModel.objects.create_user( email=email, full_name=claims.get("name", ""), keycloak_id=claims.get("sub", ""), role=claims.get("role", "buyer"), is_staff=True, ) return user def update_user(self, user, claims): user.email = claims.get("email", user.email) user.full_name = claims.get("name", user.full_name) user.is_staff = True role = claims.get("role", user.role) if role in dict(self.UserModel.Roles.choices): user.role = role user.save() return user def filter_users_by_claims(self, claims): email = claims.get("email") if not email: return self.UserModel.objects.none() return self.UserModel.objects.filter(email__iexact=email)