嗨,我被一个问题卡住了,数据库中的凭据是正确的,但它仍然打印“否则”条件“无效的电子邮件或密码”。帮我一把--我被这个问题困住了。
我尝试在“www.example.com“文件中设置AUTHENTICATION_BACKENDsettings.py。但它不是这里的解决方案。
class LoginAPIView(views.APIView):
def post(self, request):
email = request.data["email"]
password = request.data["password"]
serializer = LoginSerializer(data=request.data)
print(serializer)
user = authenticate(email=email, password=password)
if serializer.is_valid():
if user is not None:
token, created = Token.objects.get_or_create(user=user)
return Response({
'data': serializer.data,
'token': token.key
})
else:
return Response({
'errors': 'Invalid email or password.'
}, status=400)
else:
return Response(serializer.errors, status=400)
views.py 代码
class LoginSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['email', 'password']
用户串行化程序代码
class UserSerializer(serializers.ModelSerializer):
def create(self, validated_data):
user = User(
email=validated_data['email'],
age=validated_data['age'],
first_name=validated_data['first_name'],
last_name=validated_data['last_name'],
country=validated_data['country'],
hobby=validated_data['hobby'],
)
user.set_password(validated_data['password'])
user.save()
return user
class Meta:
model = User
fields = '__all__'
我知道问题出在身份验证方法上,但我不知道如何解决这个问题。另外,我已经检查了www.example.com文件中的AUTHENTICATION_BACKENDS设置settings.py,它似乎配置正确。我将感谢任何关于如何解决这个问题的见解或建议。谢谢你!
1条答案
按热度按时间4dc9hkyq1#
我的猜测是,您正在使用
django.contrib.auth import authenticate
中的默认authenticate
方法,该方法仅适用于username
和password
。您可能需要编写一个自定义的
authenticate
函数并使用它。