Enhance JWT authentication error handling and user redirection on token issues.

This commit is contained in:
SergeantPanda 2025-05-15 14:12:31 -05:00
parent e5d353ec7f
commit 5c3fdc1354
3 changed files with 43 additions and 17 deletions

View file

@ -6,7 +6,9 @@ from django.contrib.auth.models import AnonymousUser
from django.contrib.auth import get_user_model
from rest_framework_simplejwt.exceptions import InvalidToken, TokenError
from rest_framework_simplejwt.authentication import JWTAuthentication
import logging
logger = logging.getLogger(__name__)
User = get_user_model()
@database_sync_to_async
@ -15,7 +17,11 @@ def get_user(validated_token):
jwt_auth = JWTAuthentication()
user = jwt_auth.get_user(validated_token)
return user
except:
except User.DoesNotExist:
logger.warning(f"User from token does not exist. User ID: {validated_token.get('user_id', 'unknown')}")
return AnonymousUser()
except Exception as e:
logger.error(f"Error getting user from token: {str(e)}")
return AnonymousUser()
class JWTAuthMiddleware(BaseMiddleware):
@ -26,11 +32,16 @@ class JWTAuthMiddleware(BaseMiddleware):
token = query_string.get("token", [None])[0]
if token is not None:
validated_token = JWTAuthentication().get_validated_token(token)
scope["user"] = await get_user(validated_token)
try:
validated_token = JWTAuthentication().get_validated_token(token)
scope["user"] = await get_user(validated_token)
except (InvalidToken, TokenError) as e:
logger.warning(f"Invalid token: {str(e)}")
scope["user"] = AnonymousUser()
else:
scope["user"] = AnonymousUser()
except (InvalidToken, TokenError):
except Exception as e:
logger.error(f"Error in JWT authentication: {str(e)}")
scope["user"] = AnonymousUser()
return await super().__call__(scope, receive, send)