Reputation: 1
I'm trying to change the user pin after user forgotten his pin but after verifcation of reset code when use wants to enter new pin and confirm new the the data before set new pin like email and reset code is not being saved in session here is the code of verifyPinCode and SetNewPinCode and another thing is when I only want to add 2 fields in postman payload while testing apis new_pin and confirm new pin.
verifyPinCodeView
yourclass VerifyResetCodeView(APIView):
permission_classes = [permissions.AllowAny]
def post(self, request):
serializer = VerifyResetCodeSerializer(data=request.data)
if serializer.is_valid():
reset_code = serializer.validated_data.get('reset_code')
try:
pin_reset = PinResetCode.objects.get(reset_code=reset_code)
except PinResetCode.DoesNotExist:
return Response({'error': 'Invalid reset code.'}, status=status.HTTP_400_BAD_REQUEST)
if pin_reset.is_expired():
return Response({'error': 'Reset code expired.'}, status=status.HTTP_400_BAD_REQUEST)
# Store reset code and email in the session
request.session['reset_code'] = reset_code
request.session['email'] = pin_reset.email
request.session.save() # Explicitly save the session
# Debugging statements
print(f"Storing - Reset Code: {reset_code}, Email: {pin_reset.email}")
print(f"Stored Session Data - Reset Code: {request.session.get('reset_code')}, Email: {request.session.get('email')}")
return Response({'message': 'Reset code is Verified. You can now set your new PIN.'}, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
SetNewPin code view
class SetNewPinView(APIView):
permission_classes = [permissions.AllowAny]
def post(self, request):
serializer = SetNewPinSerializer(data=request.data)
if serializer.is_valid():
new_pin = serializer.validated_data.get('new_pin')
confirm_new_pin = serializer.validated_data.get('confirm_new_pin')
# Retrieve reset code and email from session
reset_code = request.session.get('reset_code')
email = request.session.get('email')
# Debugging information
print(f"Session data - Reset Code: {reset_code}, Email: {email}")
# Ensure reset code and email are present
if not reset_code or not email:
return Response({'error': 'Reset code and email not found in session.'}, status=status.HTTP_400_BAD_REQUEST)
# Check if new PINs match
if new_pin != confirm_new_pin:
return Response({'error': 'New PIN and confirm new PIN do not match.'}, status=status.HTTP_400_BAD_REQUEST)
try:
pin_reset = PinResetCode.objects.get(email=email, reset_code=reset_code)
except PinResetCode.DoesNotExist:
return Response({'error': 'Invalid reset code.'}, status=status.HTTP_400_BAD_REQUEST)
if pin_reset.is_expired():
return Response({'error': 'Reset code expired.'}, status=status.HTTP_400_BAD_REQUEST)
user = get_object_or_404(Employee, email=email)
user.set_password(new_pin)
user.save()
pin_reset.delete()
# Clear session data
request.session.pop('reset_code', None)
request.session.pop('email', None)
return Response({'message': 'PIN reset successful.'}, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Response that I'm getting from postman while testing is this:
{
"error": "Reset code and email not found in session."
}
I tried everything like added debugging steps everything. How to fix this?
Upvotes: 0
Views: 36