If/else для изменения пароля для пользователя приложения и социального пользователя
Я пытаюсь создать функциональность для смены паролей, есть два пользователя:
- registered through my app
- registered via social authentication.
В первом случае будет запрошен старый пароль, а затем новый пароль для смены пароля. во втором случае, так как у них нет пароля для приложения, когда они хотят изменить пароль в первый раз, будет запрошен только новый пароль, а затем старый пароль.
Ниже приведено то, что я пробовал до сих пор, первый тестовый пример проходит, но второй также требует старый и новый пароли! Что является причиной этого? Это правильный способ решения проблемы?
views.py
class ChangePassword(APIView):
serializer_class=ChangePasswordSerializer
serializer_class2=ChangePasswordSerializer2
model = User
permission_classes = [IsAuthenticated]
def get_object(self, queryset=None):
obj = self.request.user
return obj
def put(self,request, *args, **kwargs):
self.object = self.get_object()
if self.object.auth_provider != "email":
serializer = self.serializer_class2(data=request.data)
if serializer.is_valid():
self.object.set_password(serializer.data.get("new_password"))
self.object.auth_provider == "email"
self.object.save()
response={
'status':'success',
'code':status.HTTP_200_OK,
'message':"Password changed Successfully",
}
return Response(response)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
else:
#check old password
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
if not self.object.check_password(serializer.data.get("old_password")):
return Response({'error':["Wrong_password"]}, status=status.HTTP_400_BAD_REQUEST)
self.object.set_password(serializer.data.get("new_password"))
self.object.save()
response={
'status':'success',
'code':status.HTTP_200_OK,
'message':"Password changed Successfully",
}
return Response(response)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
serializers.py
class ChangePasswordSerializer(serializers.Serializer):
model = User
email= serializers.EmailField(min_length=5)
old_password=serializers.CharField(min_length=6)
new_password = serializers.CharField(min_length=6)
class ChangePasswordSerializer2(serializers.Serializer):
model = User
email = serializers.EmailField(min_length = 6)