Django Rest Framework - loginview 无效数据。需要一本字典,但得到了 AnonymousUser
Django Rest Framework - loginview Invalid data. Expected a dictionary, but got AnonymousUser
我正在尝试在 django rest 框架中编写登录视图,但出现此错误:
Invalid data. Expected a dictionary, but got AnonymousUser.
这是我的登录序列化程序:
class LoginSerializer(serializers.ModelSerializer):
email = serializers.EmailField(max_length=254, min_length=4)
password = serializers.CharField(max_length=68, min_length=8, write_only=True)
username = serializers.CharField(max_length=20, min_length=4, read_only=True)
tokens = serializers.CharField(max_length=700, min_length=8, read_only=True)
class Meta:
model = UserProfile
fields = ['email', 'password', 'username', 'tokens']
def validate(self, attrs):
email = attrs.get('email', '')
password = attrs.get('password', '')
user = auth.authenticate(email=email, password=password)
if not user:
raise AuthenticationFailed('Invalid credentials, please try again later')
if not user.has_verified_email:
raise AuthenticationFailed('Your email has not been verified, please verify it and then proceed to login later.')
if not user.is_active and user.has_verified_email:
raise AuthenticationFailed('Your account has been disabled, please try again later')
return {
'email': user.email,
'username': user.username,
'tokens': user.tokens,
}
return super().validate(attrs)
这是我的登录apiview:
class LoginAPIView(generics.GenericAPIView):
serializer_class = LoginSerializer
def post(self, request):
user = request.user
serializer = self.serializer_class(data=user)
serializer.is_valid(raise_exception=True)
return response.Response(serializer.data, status=status.HTTP_200_OK)
而且我还使用以下函数为用户模型返回 jwt 令牌:
def tokens(self):
refresh_token = RefreshToken.for_user(self)
return {
'refresh': str(refresh_token),
'access': str(refresh_token.access_token),
}
我检查了所有内容,我实际上正在学习 youtube 上的课程,但我不明白哪里出了问题以及我应该如何纠正它,我将不胜感激任何形式的建议。谢谢。
这一行有错误:
serializer = self.serializer_class(data=user)
您可以检查它是否与 request.data
一起使用
我正在尝试在 django rest 框架中编写登录视图,但出现此错误:
Invalid data. Expected a dictionary, but got AnonymousUser.
这是我的登录序列化程序:
class LoginSerializer(serializers.ModelSerializer):
email = serializers.EmailField(max_length=254, min_length=4)
password = serializers.CharField(max_length=68, min_length=8, write_only=True)
username = serializers.CharField(max_length=20, min_length=4, read_only=True)
tokens = serializers.CharField(max_length=700, min_length=8, read_only=True)
class Meta:
model = UserProfile
fields = ['email', 'password', 'username', 'tokens']
def validate(self, attrs):
email = attrs.get('email', '')
password = attrs.get('password', '')
user = auth.authenticate(email=email, password=password)
if not user:
raise AuthenticationFailed('Invalid credentials, please try again later')
if not user.has_verified_email:
raise AuthenticationFailed('Your email has not been verified, please verify it and then proceed to login later.')
if not user.is_active and user.has_verified_email:
raise AuthenticationFailed('Your account has been disabled, please try again later')
return {
'email': user.email,
'username': user.username,
'tokens': user.tokens,
}
return super().validate(attrs)
这是我的登录apiview:
class LoginAPIView(generics.GenericAPIView):
serializer_class = LoginSerializer
def post(self, request):
user = request.user
serializer = self.serializer_class(data=user)
serializer.is_valid(raise_exception=True)
return response.Response(serializer.data, status=status.HTTP_200_OK)
而且我还使用以下函数为用户模型返回 jwt 令牌:
def tokens(self):
refresh_token = RefreshToken.for_user(self)
return {
'refresh': str(refresh_token),
'access': str(refresh_token.access_token),
}
我检查了所有内容,我实际上正在学习 youtube 上的课程,但我不明白哪里出了问题以及我应该如何纠正它,我将不胜感激任何形式的建议。谢谢。
这一行有错误:
serializer = self.serializer_class(data=user)
您可以检查它是否与 request.data