DRF IsAuthenticated не работает

У меня установлено разрешение ListView для IsAuthenticated, но когда я нажимаю URL-адрес в окне Incognito. Я могу просматривать данные. Хотя, когда я устанавливаю разрешение для IsAdmin, оно отлично работает, показывая мне ошибку. Вот мой сериализатор

class BlogListSerializer(ModelSerializer):
    url = HyperlinkedIdentityField(
    view_name="blog_api:post_detail",
    lookup_field="slug"
    )
    class Meta:
        model = Blog
        fields = [
           'url',
           'title',
           'category',
           'date',
           'publish',
           'draft'
         ]

Ниже мой взгляд

from rest_framework.permissions import IsAuthenticated

class BlogListAPIView(ListAPIView):
    queryset = Blog.objects.filter(publish=True, draft=False)
    serializer_class = BlogListSerializer
    permission_classes = [IsAuthenticated]

Файлы настроек

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    )
}

Настройки промежуточного ПО

MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Когда я пытаюсь получить доступ к пользователю, вызывая get_object на BlogListAPIView, он выдает ошибку, не сериализуемую JSON. По некоторым причинам промежуточное ПО принимает AnonymousUser в качестве пользователя. Если в систему вошел AnonymousUser, он не сможет получить разрешение IsAuthenticated. Вот что происходит (наверное). Но я не могу выйти из AnonymousUser. Почему AnonymousUser получает доступ и как его выйти?

2 ответа

Конечно, есть и другие проблемы, которых нет в вашем вопросе. Я создал новый проект с предоставленными вами фрагментами и получу http 401, когда попаду по URL-адресу без входа в систему. Я предоставил коды в Github:

получите https://github.com/Rmaan/pastebin/tree/so-47596482

запустите сервер и перейдите по http://localhost:8000/blog

Проблема была устранена путем обновления с Django 1.9 до Django 1.10 и использования DRF 3.3.7.

Другие вопросы по тегам