30 lines
1 KiB
Python
30 lines
1 KiB
Python
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)
|