forgot password and email verification

This commit is contained in:
jain
2023-06-24 18:17:32 +05:30
parent 8bc3a307c0
commit 89982f851f
10 changed files with 226 additions and 11 deletions

View File

@ -1,12 +1,13 @@
from rest_framework import viewsets, status
from rest_framework import viewsets, status, views
from rest_framework.decorators import action
from rest_framework.response import Response
import random
from django.contrib.auth import authenticate, login
from guardian.models import Guardian
from junior.models import Junior
from account.models import UserProfile, UserPhoneOtp, UserEmailOtp
from django.contrib.auth.models import User
from .serializers import SuperUserSerializer, GuardianSerializer, JuniorSerializer, EmailVerificationSerializer
from .serializers import (SuperUserSerializer, GuardianSerializer, JuniorSerializer, EmailVerificationSerializer,
ForgotPasswordSerializer, ResetPasswordSerializer)
from django.views.decorators.csrf import csrf_exempt
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView
@ -15,6 +16,49 @@ from base.messages import ERROR_CODE, SUCCESS_CODE
from guardian.tasks import generate_otp
from account.utils import custom_response, custom_error_response
from django.core.mail import EmailMessage
from django.core.mail import send_mail
from rest_framework.response import Response
from templated_email import send_templated_mail
import secrets
class ResetPasswordAPIView(views.APIView):
def post(self, request):
print("request.data====>",request.data)
serializer = ResetPasswordSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return custom_response(SUCCESS_CODE['3006'], response_status=status.HTTP_200_OK)
return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST)
class ForgotPasswordAPIView(views.APIView):
def post(self, request):
serializer = ForgotPasswordSerializer(data=request.data)
if serializer.is_valid():
email = serializer.validated_data['email']
try:
User.objects.get(email=email)
except User.DoesNotExist:
return custom_error_response(ERROR_CODE['2004'], response_status=status.HTTP_404_NOT_FOUND)
verification_code = ''.join([str(random.randrange(9)) for _ in range(6)])
# Send the verification code to the user's email
subject = 'Password Reset Verification Code'
message = f'Your verification code is: {verification_code}'
from_email = 'infozodbank@gmail.com'
recipient_list = [email]
send_templated_mail(
template_name='email_reset_verification.email',
from_email=from_email,
recipient_list=recipient_list,
context={
'verification_code': verification_code
}
)
UserEmailOtp.objects.create(email=email, otp=verification_code)
return custom_response(SUCCESS_CODE['3015'], {'verification_code': verification_code},
response_status=status.HTTP_200_OK)
return custom_error_response(serializer.errors, response_status=status.HTTP_400_BAD_REQUEST)
class SendPhoneOtp(viewsets.ModelViewSet):
"""Send otp on phone"""
def create(self, request, *args, **kwargs):