7

私はListViewのアクセス許可がIsAuthenticatedに設定されていますが、シークレットウィンドウでそのURLにヒットしました。私はデータを見ることができます。 IsAdminにアクセス許可を設定すると、エラーが表示されて完全に機能します。 は、ここで私はCALによって、ユーザーにアクセスしようとすると以下の私のビューがDRF 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', 
] 

from rest_framework.permissions import IsAuthenticated 

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

設定ファイルである私のシリアライザ

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

ですBlogListAPIViewでget_objectを呼び出すと、JSONシリアライズ可能ではないというエラーがスローされます。何らかの理由で、ミドルウェアがAnonymousUserをユーザーとして取得しています。 AnonymousUserがログインしている場合は、IsAuthenticated権限に失敗します。それは起こっていることです(私は推測します)。しかし、私はAnonymousUserをログアウトできません。 なぜAnonymousUserにアクセスしていて、彼をログアウトするには?

+0

ご不明な点がございましたら、ご確認ください。あなたは "それは完璧に動作する"と述べているので、実際の問題は何ですか? – Linovia

+0

settings.pyにDEFAULT_AUTHENTICATION_CLASSES&DEFAULT_PERMISSION_CLASSESを定義しましたか?あなたはそれらの値をここに入れることができますか? –

+0

@Linovia IsAdmin Permissionのために完全に正常に動作します。 –

答えて

3

あなたの質問には記載されていない他のいくつかの問題があります。 。私はあなたが提供するスニペットと新鮮なプロジェクトを作成し、私がログインせずにURLを打ったときに、HTTP 401を取得する私はGithubの中にコードを提供:

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

のrunserverを取得し、http://localhost:8000/blog

+0

dj 1.9を使ってテストできますか?私はこのバージョンで同じ問題がありますか? –

+0

私はそれがいくつかのミドルウェアの問題に関係していると思います。 @アルマンの記事は答えではありません。新鮮なプロジェクトでは、問題はなくなります。しかし確かに、私はこのプロジェクトの段階にあり、私はプロジェクトを新しく始めることができません。私はそれはあなたを助けにはなりませんことを知っている恵み –

+0

は、それはだが、それはあなたの質問への答えです。私はちょうど質問で提供したものがあなたが主張する問題を生み出さないことを示しました。私は「新鮮なスタートをして問題はなくなる」という意味ではありませんでした。認証とコードに関する詳細を提供する必要があります。 –

1

問題を参照しますDjango 1.9からDjango 1.10にアップグレードし、DRF 3.3.7を使用してアップグレードされました。