Skip to content

Commit 3dad84d

Browse files
Merge pull request #373 from MySecondLanguage/fixed-authentication-for-session
Fixed authentication for session
2 parents 5d2f6ec + ed808c4 commit 3dad84d

File tree

2 files changed

+23
-14
lines changed

2 files changed

+23
-14
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: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,42 @@
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+
token = self.get_token_from_request(request)
30+
if token:
31+
return self.jwt_manager.verify_jwt_token(token) or AnonymousUser()
32+
return AnonymousUser()
33+
34+
def get_user_from_session(self, request):
35+
return request.user if request.user.is_authenticated else AnonymousUser()
36+
2537
def get_token_from_request(self, request):
26-
"""Extract the token from the Authorization header or cookies."""
27-
# Check Authorization header
2838
auth_header = request.headers.get("Authorization")
2939
if auth_header and auth_header.startswith("Bearer "):
3040
return auth_header.split(" ")[1]
3141

32-
# Fallback to cookies
3342
return request.COOKIES.get("access_token")

0 commit comments

Comments
 (0)