7

Mam zestaw uprawnień zestawu ListView do IsAuthenticated, ale po kliknięciu adresu URL w oknie Incognito. Mogę wyświetlić dane. Chociaż kiedy ustawiam uprawnienia do IsAdmin, działa to doskonale, pokazując mi błąd. Oto moja serializerDRF IsAuthenticated nie działa

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' 
     ] 

Poniżej jest mój widok

from rest_framework.permissions import IsAuthenticated 

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

Ustawienia plików

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

Middleware

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', 
] 

Kiedy próbuję uzyskać dostęp użytkownikowi przez cal ling get_object na BlogListAPIView, zgłasza błąd nie jest serializowany JSON. Z jakiegoś powodu oprogramowanie pośredniczące przyjmuje AnonymousUser jako użytkownik. Jeśli zalogowany jest AnonymousUser, nie uda się uzyskać pozwolenia IsAuthenticated. Tak się właśnie dzieje (chyba). Ale nie mogę wylogować się z AnonymousUser. Dlaczego AnonymousUser uzyskuje dostęp i jak się go wylogować?

+0

Proszę się upewnić, że pytanie jest jasne. Twierdzisz, że "działa doskonale", więc jaki jest faktyczny problem? – Linovia

+0

czy zdefiniowałeś DEFAULT_AUTHENTICATION_CLASSES & DEFAULT_PERMISSION_CLASSES w settings.py? czy możesz umieścić te wartości tutaj? –

+0

@Linovia Działa to doskonale dla IsAdmin Permission. –

Odpowiedz

3

Z pewnością istnieją inne problemy, które nie są wymienione w pytaniu. . I stworzył świeży projekt z fragmentów podanych i dostanie http 401 kiedy uderzy URL bez logowania I, pod warunkiem kody w Github:

dostać https://github.com/Rmaan/pastebin/tree/so-47596482

runserver i przejdź do http://localhost:8000/blog

+0

Czy możesz przetestować używając dj 1.9, mam ten sam problem w tej wersji? –

+0

Sądzę, że jest to związane z pewnym problemem oprogramowania pośredniego. Post @ Arman nie jest odpowiedzią. Przy nowym projekcie problem zniknie. Ale na pewno jestem na takim etapie projektu, w którym nie stać mnie na świeże rozpoczęcie projektu. –

+0

@NikhilShirsath Mam inny projekt z tym samym problemem, dlatego zaoferowałem nagrodę –

1

Emisja nie było przez uaktualnienie z Django 1.9 do Django 1.10 i korzystanie z DRF 3.3.7.