我正在使用 django-rest-knox,当我使用 knox_views.LogoutAllView.as_view()
注销时,它给了我这个错误:
"detail": "Authentication credentials were not provided."
注意:我使用的是自定义用户模型(AbstarctUser
和 BaseUserManager
)
这是serializers.py
:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email','birth_date','first_name','last_name')
# there is a registerserializer too
class LoginSerializer(serializers.Serializer):
email = serializers.EmailField()
password = serializers.CharField()
def validate(self, data):
user = authenticate(**data)
if user and user.is_active:
return user
raise serializers.ValidationError("Incorrect Credentials")
这里是views.py
:
class LoginView(generics.GenericAPIView):
serializer_class = LoginSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user= serializer.validated_data
return Response({
"user": UserSerializer(user, context=self.get_serializer_context()).data,
"token": AuthToken.objects.create(user)[1]
})
class RegisterAPI(generics.GenericAPIView):
serializer_class = RegisterSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
return Response({
"user": UserSerializer(user, context=self.get_serializer_context()).data,
"token": AuthToken.objects.create(user)[1]
})
答案 0 :(得分:0)
来自docs:
<块引用>这个视图只接受一个空正文的 post 请求。 它响应 Knox 令牌身份验证。请求成功后,用于身份验证的令牌以及注册到同一用户帐户的所有其他令牌将从系统中删除,并且无法再用于身份验证。
这意味着您仍然需要使用您在通过注销端点进行身份验证时生成的令牌。