from rest_framework.authentication import TokenAuthentication from rest_framework.exceptions import AuthenticationFailed import logging logger = logging.getLogger(__name__) class DebugTokenAuthentication(TokenAuthentication): """ Extended TokenAuthentication with detailed logging for debugging """ def authenticate(self, request): auth_header = request.META.get('HTTP_AUTHORIZATION', '') logger.info(f"🔍 AUTH DEBUG - Header: {auth_header}") # Check if header exists if not auth_header: logger.warning("🔴 AUTH DEBUG - No Authorization header found") return None # Extract token parts = auth_header.split() if len(parts) != 2 or parts[0].lower() != 'token': logger.warning(f"🔴 AUTH DEBUG - Invalid header format: {parts}") return None token_key = parts[1] logger.info(f"🔍 AUTH DEBUG - Token key extracted: {token_key[:10]}...") try: # Try to get token from database from rest_framework.authtoken.models import Token token = Token.objects.select_related('user').get(key=token_key) logger.info(f"✅ AUTH DEBUG - Token found in DB") logger.info(f"✅ AUTH DEBUG - User: {token.user}") logger.info(f"✅ AUTH DEBUG - User ID: {token.user.id}") logger.info(f"✅ AUTH DEBUG - User is_active: {token.user.is_active}") logger.info(f"✅ AUTH DEBUG - User is_authenticated: {token.user.is_authenticated}") if not token.user.is_active: logger.error("🔴 AUTH DEBUG - User is not active") raise AuthenticationFailed('User inactive or deleted.') logger.info("✅ AUTH DEBUG - Authentication SUCCESSFUL") return (token.user, token) except Exception as e: logger.error(f"🔴 AUTH DEBUG - Token lookup failed: {str(e)}") raise AuthenticationFailed('Invalid token.')