/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.user
是 AnonymousUser
,这是 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)
我已经成功部署了登录视图和它 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.user
是 AnonymousUser
,这是 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)