Как использовать пользовательский класс аутентификации внутри ListAPIView
Я использую react components и для тестирования своего кода написал быстрый пользовательский класс аутентификации и определил его в настройках rest_framework следующим образом:
DEFAULT_AUTHENTICATION_CLASSES += ['restaurant.rest_api.dev.DevAuthentication']
Это отлично работает и использует пользователя, которого я ему указываю
class DevAuthentication(authentication.BaseAuthentication):
def authenticate(self, request):
user = User.objects.get(id=6)
return (user,None)
Но теперь я пытаюсь использовать ListAPIView из generics, и пользователь, который выводится на экран, является анонимным пользователем, что означает, что он не использует мой класс аутентификации. Я обнаружил, что классы могут быть явно определены внутри функции, что я и сделал
class SearchUsersAPIView(generics.ListAPIView):
search_fields = ['email', 'first_name', 'last_name', 'phone_number']
filter_backends = (filters.SearchFilter,)
queryset = CustomUser.objects.all()
authentication_classes = [restaurant.rest_api.dev.DevAuthentication]
serializer_class = userSerializer
@permission_classes([IsAuthenticated])
def dispatch(self,request, *args, **kwargs):
self.request = request
print(self.request.user)
if request.user.is_anonymous or request.user.is_user_superuser()==False:
response = Response({"message":"Action Denied"}, status = status.HTTP_400_BAD_REQUEST)
response.accepted_renderer = JSONRenderer()
response.accepted_media_type = "application/json"
response.renderer_context = {}
return response
return super().dispatch(request,*args, **kwargs)
Я должен добавить, что если я пишу простое функциональное представление с декоратором api_view, то аутентифицированным пользователем является тот, которого я указал. Интересно, почему это не работает только для этого класса и использует его настройки по умолчанию, а именно базовую и сеансовую аутентификацию. Есть ли способ добиться того, чего я хочу?
система показывает анонимного пользователя, когда она не может проверить аутентификацию пользователей на просмотр, поэтому вы можете попробовать добавить
permission_classes=[IsAuthenticated]