何らかの理由でデータベースでトークンが削除されたときに401を返す方法を見つけるのは難しいです。Django Rest FrameworkでAuthトークンが見つからないときに401を返す方法
私を説明しましょう。
私の一般的な設定では、SessionAuthenticationとTokenAuthenticationスキームを使用しています。私は、
class AcmeObtainAuthToken(APIView):
throttle_classes =()
permission_classes =()
parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
renderer_classes = (renderers.JSONRenderer,)
serializer_class = AcmeAuthTokenSerializer
def post(self, request, *args, **kwargs):
serializer = self.serializer_class(data=request.data)
serializer.context = {'request': self.request}
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
token, created = Token.objects.get_or_create(user=user)
return Response({'token': token.key,
'school': school,
'user': user.id})
obtain_auth_token = AcmeObtainAuthToken.as_view()
私の問題は、DBに保存されているときに、トークントークンを送信何らかの理由とクライアントのために行っていることである。
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.DjangoFilterBackend',
),
'DATETIME_FORMAT': '%a, %d %b %Y %H:%M:%S %z',
'DATETIME_INPUT_FORMATS': ['iso-8601', '%Y-%m-%d %H:%M:%S', '%a, %d %b %Y %H:%M:%S %z'],
'DATE_FORMAT': '%Y-%m-%d',
'DATE_INPUT_FORMATS': ['%Y-%m-%d', '%m/%d/%YYYY'],
'PAGE_SIZE': 20
}
は、私はこのように、認証トークンを生成するためのビューを持っています
:私はこれは本当に不可解ですdocsを見てみると401
を必要とする場合、403を取得使用される応答の種類は、認証方式によって異なります。複数の認証スキームが使用されているかもしれませんが、レスポンスのタイプを決定するために使用できるスキームは1つだけです。ビューの最初の認証クラスは、応答のタイプを決定するときに使用されます。
それはどうですか?例はありません。DRFがここでどのようにその魔法をしているのかちょっと混乱しています...
で削除「rest_framework.authentication.SessionAuthentication」 DEFAULT_AUTHENTICATION_CLASSES – Ykh