Skip to content

Commit 4dff616

Browse files
Improved middleware for both session and jwt authentication
1 parent 4ab3fb1 commit 4dff616

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

nxtbn/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ def get_env_var(key, default=None, var_type=str):
334334
'SCHEMA': 'nxtbn.admin_schema.admin_schema',
335335
'MIDDLEWARE': [
336336
'graphene_django.debug.DjangoDebugMiddleware',
337-
'nxtbn.users.auth_middleware.GraphQLJWTMiddleware',
337+
'nxtbn.users.auth_middleware.NXTBNGraphQLAuthenticationMiddleware',
338338
],
339339
'RELAY_CONNECTION_MAX_LIMIT': 100, # pagination limit
340340
}

nxtbn/users/auth_middleware.py

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,41 @@
11
from nxtbn.users.utils.jwt_utils import JWTManager
22
from django.contrib.auth.models import AnonymousUser
3+
from django.contrib.auth import get_user_model
34

4-
class GraphQLJWTMiddleware:
5+
class NXTBNGraphQLAuthenticationMiddleware:
56
def __init__(self):
67
self.jwt_manager = JWTManager()
78

89
def resolve(self, next, root, info, **args):
910
request = info.context
1011

11-
token = self.get_token_from_request(request)
12+
# First check JWT token
13+
user = self.get_user_from_jwt(request)
14+
15+
# If no JWT token, fall back to session-based authentication
16+
if not user.is_authenticated:
17+
user = self.get_user_from_session(request)
1218

13-
if token:
14-
user = self.jwt_manager.verify_jwt_token(token)
15-
if user:
16-
info.context.user = user
17-
else:
18-
info.context.user = AnonymousUser()
19-
else:
20-
info.context.user = AnonymousUser()
19+
# If no valid user from either method, set as AnonymousUser
20+
if not user.is_authenticated:
21+
user = AnonymousUser()
22+
23+
info.context.user = user
2124

2225
# Continue processing the query
2326
return next(root, info, **args)
2427

28+
def get_user_from_jwt(self, request):
29+
"""Retrieve the user from the JWT token in the request."""
30+
token = self.get_token_from_request(request)
31+
if token:
32+
return self.jwt_manager.verify_jwt_token(token) or AnonymousUser()
33+
return AnonymousUser()
34+
35+
def get_user_from_session(self, request):
36+
"""Retrieve the user from the session, if available."""
37+
return request.user if request.user.is_authenticated else AnonymousUser()
38+
2539
def get_token_from_request(self, request):
2640
"""Extract the token from the Authorization header or cookies."""
2741
# Check Authorization header

0 commit comments

Comments
 (0)