Промежуточное ПО Django запускается до получения разрешений drf
У меня есть класс промежуточного ПО, который выглядит примерно так:
class DogMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
return self.get_response(request)
def process_view(self, request, view_func, view_args, view_kwargs):
dog_id = view_kwargs.get("dog_id")
if dog_id is not None:
dog = Dog.objects.get(id=dog_id)
request.dog = dog
У меня есть представление, которое выглядит примерно так:
class DogDetail(APIView):
def get(self, request, dog_id, *args, **kwargs):
return "some nice doggy info"
Мои разрешения по умолчанию IsAuthenticated:
"DEFAULT_PERMISSION_CLASSES": (
"rest_framework.permissions.IsAuthenticated",
),
Когда я вызываю представление DogDetail из состояния выхода из системы, с несуществующей собакой, я получаю ошибку 500 и исключение DoesNotExist. Из этого я делаю вывод, что промежуточное программное обеспечение запускается до разрешений.
Мои вопросы: Является ли это ожидаемым поведением? Если нет, то что я делаю неправильно?
Если да, то это очень неидеально, потому что будет очень легко утечка данных через промежуточное ПО. В моем примере неаутентифицированному пользователю было бы очень легко определить, какие dog_id существуют. Какой хороший способ смягчить это? Думаю, я мог бы проверять аутентификацию в промежуточном ПО и пропускать неаутентифицированные запросы без получения dog_id? Это похоже на глубокую ошибку в будущем, когда промежуточное ПО работает правильно, но собака не привязывается к запросу.
Заранее спасибо!