2016-04-04 17 views
0

残りのAPIを使用してdjangoサイトで認証する角型アプリケーションを作っています。適切であり得る二つの異なるエラーコードが存在する未認証の要求が許可を拒否されDjango Restフレームワークの認証エラー

を:DRFのDOCそれらは次のように拒否されたユーザ認証は、2つのエラー、HTTP 401とHTTP 403をもたらすであろうと述べています。 Howenever、私はいくつかのダミーデータを使用して認証しようとすると、それは意図的に間違っている

を拒否されました

    1. HTTP 401不正なHTTP 403許可は、私はエラー応答HTTP 400を取得するととnon_field_errors。ここの問題は何ですか?

      まず、ユーザトークンを取得するためにユーザ名とパスワードを使用して単純な認証を行います。これはサイトの他の操作で必要になります。

      私はあなたが以下のそれを見ることができ、expering認証トークンを取得するための方法を使用しています:

      クラスObtainExperingAuthToken(ObtainAuthToken): デフ(自己、要求、* argsを、** kargs)を投稿: シリアライザ= self.serializer_class(データ= request.data)

      if serializer.is_valid(): 
           print serializer 
           user = UserProfile.objects.get(email=serializer.data['username']) 
           token, created = Token.objects.get_or_create(user=user) 
      
           utc_now = timezone.now() 
           if not created and token.created < utc_now - datetime.timedelta(hours=24): 
            token.delete() 
            print serializer.data 
            token = Token.objects.create(user=serializer.data['user']) 
            token.created = datetime.datetime.utcnow() 
            token.save() 
      
           groups = [group.name for group in user.groups.all()] 
           response_data = { 
            'email': user.email, 
            'token': token.key, 
            'groups': groups 
           } 
      
           return HttpResponse(json.dumps(response_data), content_type='application/json') 
          return HttpResponse(serializer.errors, status=400) 
      

      @Edit REST_FRAMEWORK

    答えて

    0

    まず、あなたの説明ではあまり明確ではありませんが、ユーザアクセストークンを提供する責任を負うAPIで400エラーが発生していると思います。明らかに、このAPIには認証がないので(クライアント認証以外の場合もあるかもしれません)、自分で述べたように無効なデータを提供しているため、本当に間違った要求エラーが発生しています。 認証エラーは、認証されていないアクセスを許可しないapiにアクセスするときに発生します。実際には認証トークンを提供するapiの場合とは異なるはずです。

    第2に、認証クラスを追加するには、REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES']またはビュークラスのAUTHENTICATION_CLASSES変数のいずれかに認証クラスを追加する必要があります。

    +0

    申し訳ありませんが、私はそれを明確にします。私はユーザーアクセストークンを提供していません、私はバックエンドとのアクセストークンを提供する必要があるエンドポイントに間違ったユーザー名とパスワードを提供していますので、提供データでユーザーを認証できます。 UnathourizedまたはForbbidenを受け取ることを期待していましたが、代わりにBad Requestを受け取りました。私は 'REST_FRAMEWORK'値で質問を編集します。 –

    関連する問題