from rest_framework.authentication import BaseAuthentication from rest_framework.permissions import IsAuthenticated from rest_framework.exceptions import AuthenticationFailed from .utils import get_user_id_from_token from .models import ParadiseUser import logging logger = logging.getLogger(__name__) class RedisTokenAuthentication(BaseAuthentication): def authenticate_header(self, request): return 'Bearer realm="api"' def authenticate(self, request): authorization = request.headers.get('Authorization') if not authorization: return None if len(authorization.split(' ')) < 2: return None token = authorization.split(' ')[1] if not token: return None logger.debug(f"Authorization header: {token}") # 使用日志记录 user_id = get_user_id_from_token(token) if not user_id: raise AuthenticationFailed('Invalid token') try: user = ParadiseUser.objects.get(id=user_id) except ParadiseUser.DoesNotExist: raise AuthenticationFailed('User not found') return (user, None)