/api/logout 'AnonymousUser' 处的 AttributeError 对象没有属性 'auth_token'

AttributeError at /api/logout 'AnonymousUser' object has no attribute 'auth_token'

我已经成功部署了登录视图和它 returns 令牌,但是当我尝试注销它时 returns 出现以下错误。我是新手所以不知道原因。

这些是我的登录和注销视图。

class LoginUserView(GenericAPIView):
    permission_classes = [AllowAny]
    serializer_class = UserLoginSerializer

def post(self, request, *args, **kwargs):
    data = request.data
    serializer = UserLoginSerializer(data=data)
    serializer.is_valid(raise_exception=True)
    new_data = serializer.data
    user = serializer.validated_data["user"]
    token, created = Token.objects.get_or_create(user=user)
    #return response.Response(new_data, status=status.HTTP_200_OK)
    return response.Response({"token": token.key},   status=status.HTTP_200_OK)
    # return response.Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

class Logout(GenericAPIView):
    def get(self, request, format=None):
        # simply delete the token to force a login
        request.user.auth_token.delete()
        return Response(status=status.HTTP_200_OK)

您需要设置 permission_classes class

from rest_framework.generics import GenericAPIView
from rest_framework.permissions import IsAuthenticated


class Logout(GenericAPIView):
    <b>permission_classes = [IsAuthenticated]</b>
    authentication_classes = [YourAuthClass] 

    def get(self, request, format=None):
        # simply delete the token to force a login
        request.user.auth_token.delete()
        return Response(status=status.HTTP_200_OK)

注意:如果您没有设置默认值 class,您可能还需要设置 authentication_classes

当用户未正确验证时,您的问题就会出现。使用 request.is_authenticated 检查用户是否已通过身份验证。如果您已登录并且出现此错误,则意味着您的登录系统不正确,因为 Django 告诉 request.userAnonymousUser,这是 Django 在没有人登录时使用的 'user'英寸

class Logout(GenericAPIView):
    def get(self, request, format=None):
        # simply delete the token to force a login
        if request.is_authenticated():
            request.user.auth_token.delete()
        return Response(status=status.HTTP_200_OK)