Skip to content

Commit cd27e53

Browse files
committed
feat: login user via email instead of username
1 parent cc00e09 commit cd27e53

2 files changed

Lines changed: 14 additions & 14 deletions

File tree

backend/application/access_control/services/oidc_authentication.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from rest_framework.request import Request
1313

1414
from application.access_control.models import Authorization_Group, User
15-
from application.access_control.queries.user import get_user_by_username
15+
from application.access_control.queries.user import get_user_by_email
1616
from application.commons.models import Settings
1717

1818
OIDC_PREFIX = "Bearer"
@@ -71,12 +71,12 @@ def _validate_jwt(self, token: str) -> Optional[User]:
7171
algorithms=ALGORITHMS,
7272
audience=os.environ["OIDC_CLIENT_ID"],
7373
)
74-
username = payload.get(os.environ["OIDC_USERNAME"])
75-
user = get_user_by_username(username)
74+
email = payload.get(os.environ["OIDC_EMAIL"])
75+
user = get_user_by_email(email)
7676
if user:
7777
user = self._check_user_change(user, payload)
7878
return user
79-
return self._create_user(username, payload)
79+
return self._create_user(email, payload)
8080
except jwt.PyJWTError as e:
8181
raise AuthenticationFailed(str(e)) from e
8282

@@ -94,10 +94,10 @@ def _get_jwks_uri(self) -> str:
9494

9595
return jwks_uri
9696

97-
def _create_user(self, username: str, payload: dict) -> User:
98-
user = User(username=username, first_name="", last_name="", email="")
99-
if os.environ.get("OIDC_EMAIL"):
100-
user.email = payload[os.environ["OIDC_EMAIL"]]
97+
def _create_user(self, email: str, payload: dict) -> User:
98+
user = User(email=email, first_name="", last_name="", username="")
99+
if os.environ.get("OIDC_USERNAME"):
100+
user.username = payload[os.environ["OIDC_USERNAME"]]
101101
if os.environ.get("OIDC_FULL_NAME"):
102102
user.full_name = payload[os.environ["OIDC_FULL_NAME"]]
103103
if os.environ.get("OIDC_FIRST_NAME"):
@@ -126,15 +126,15 @@ def _create_user(self, username: str, payload: dict) -> User:
126126
return user
127127
except IntegrityError as e:
128128
# User was most likely created by another request
129-
existing_user = get_user_by_username(username)
129+
existing_user = get_user_by_email(email)
130130
if not existing_user:
131131
raise e
132132
return existing_user
133133

134134
def _check_user_change(self, user: User, payload: dict) -> User:
135135
user_changed = False
136-
if os.environ.get("OIDC_EMAIL") and user.email != payload[os.environ["OIDC_EMAIL"]]:
137-
user.email = payload[os.environ["OIDC_EMAIL"]]
136+
if os.environ.get("OIDC_USERNAME") and user.username != payload[os.environ["OIDC_USERNAME"]]:
137+
user.username = payload[os.environ["OIDC_USERNAME"]]
138138
user_changed = True
139139
if os.environ.get("OIDC_FULL_NAME") and user.full_name != payload[os.environ["OIDC_FULL_NAME"]]:
140140
user.full_name = payload[os.environ["OIDC_FULL_NAME"]]

backend/pyproject.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ python = ">= 3.10, < 3.13"
1414
gunicorn = "23.0.0" # https://github.com/benoitc/gunicorn
1515
django = "5.1.7" # https://www.djangoproject.com/
1616
django-environ = "0.12.0" # https://github.com/joke2k/django-environ
17-
django-filter = "25.1" # https://github.com/carltongibson/django-filter
17+
django-filter = "25.1" # https://github.com/carltongibson/django-filter
1818
django-csp = "3.8" # https://github.com/mozilla/django-csp
19-
django-picklefield = "3.3" # https://github.com/gintas/django-picklefield
19+
django-picklefield = "3.3" # https://github.com/gintas/django-picklefield
2020
django-encrypted-model-fields = "0.6.5" # https://gitlab.com/lansharkconsulting/django/django-encrypted-model-fields
2121
argon2-cffi = "23.1.0" # https://github.com/hynek/argon2_cffi
2222
whitenoise = "6.9.0" # https://github.com/evansd/whitenoise
@@ -27,7 +27,7 @@ django-cors-headers = "4.7.0" # https://github.com/adamchainz/django-cors-header
2727
# OpenAPI 3
2828
# ------------------------------------------------------------------------------
2929
drf-spectacular = "0.28.0" # https://github.com/tfranzel/drf-spectacular
30-
drf-spectacular-sidecar = "2025.3.1" # https://github.com/tfranzel/drf-spectacular-sidecar
30+
drf-spectacular-sidecar = "2025.4.1" # https://github.com/tfranzel/drf-spectacular-sidecar
3131
# Token authentication
3232
# ------------------------------------------------------------------------------
3333
PyJWT = "2.10.1" # https://github.com/jpadilla/pyjwt

0 commit comments

Comments
 (0)