我正在使用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]
})
2条答案
按热度按时间nhaq1z211#
从文档:
此视图仅接受正文为空的post请求。它响应Knox令牌验证。在成功的请求中,用于验证的令牌以及注册到同一用户帐户的所有其他令牌将从系统中删除,并且不能再用于验证。
这意味着您仍然需要使用在与注销端点进行身份验证时生成的令牌。
ego6inou2#
你必须在新的logout视图中显式覆盖authentication_classes或者从Django设置中调用它
或
或者直接从Django设置中访问