forgot, reset and change password

This commit is contained in:
jain
2023-06-26 10:38:49 +05:30
parent 89982f851f
commit 9db620d818
7 changed files with 51 additions and 13 deletions

View File

@ -37,7 +37,33 @@ class ResetPasswordSerializer(serializers.Serializer):
user_details.save()
return {'password':password}
return user_opt_details
return ''
class ChangePasswordSerializer(serializers.Serializer):
"""Update Password after verification"""
current_password = serializers.CharField(max_length=100)
new_password = serializers.CharField(required=True)
class Meta(object):
"""Meta info"""
model = User
def validate_current_password(self, value):
user = self.context
if self.context.password not in ('', None):
if user.check_password(value):
return value
raise serializers.ValidationError({"error":"Invalid Current password"})
def create(self, validated_data):
new_password = validated_data.pop('new_password')
user_details = User.objects.filter(email=self.context).last()
print("user_details==>", user_details)
if user_details:
print("333333333==>",user_details.password)
user_details.set_password(new_password)
user_details.save()
return {'password':new_password}
return user_details
return ''

View File

@ -1,7 +1,7 @@
{% extends "templated_email/email_base.email" %}
{% block subject %}
Reset Password Verification
Password Reset Verification Code
{% endblock %}
{% block plain %}

View File

@ -5,7 +5,7 @@ from rest_framework.decorators import api_view
"""Third party import"""
from rest_framework import routers
from .views import (UserLogin, SendPhoneOtp, UserPhoneVerification, UserEmailVerification, ReSendEmailOtp,
ForgotPasswordAPIView, ResetPasswordAPIView)
ForgotPasswordAPIView, ResetPasswordAPIView, ChangePasswordAPIView)
"""Router"""
router = routers.SimpleRouter()
@ -20,5 +20,6 @@ router.register('resend-email-otp', ReSendEmailOtp, basename='resend-email-otp')
urlpatterns = [
path('api/v1/', include(router.urls)),
path('api/v1/forgot-password/', ForgotPasswordAPIView.as_view()),
path('api/v1/reset-password/', ResetPasswordAPIView.as_view())
path('api/v1/reset-password/', ResetPasswordAPIView.as_view()),
path('api/v1/change-password/', ChangePasswordAPIView.as_view())
]

View File

@ -7,21 +7,34 @@ 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,
ForgotPasswordSerializer, ResetPasswordSerializer)
ForgotPasswordSerializer, ResetPasswordSerializer, ChangePasswordSerializer)
from django.views.decorators.csrf import csrf_exempt
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView
from rest_framework_simplejwt.tokens import RefreshToken
from base.messages import ERROR_CODE, SUCCESS_CODE
from guardian.tasks import generate_otp
from django.conf import settings
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 rest_framework.permissions import IsAuthenticated
from templated_email import send_templated_mail
import secrets
class ChangePasswordAPIView(views.APIView):
permission_classes = [IsAuthenticated]
def post(self, request):
print("request.data====>",request.data)
print("request.user====>", request.user)
serializer = ChangePasswordSerializer(context=request.user, 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 ResetPasswordAPIView(views.APIView):
def post(self, request):
print("request.data====>",request.data)
@ -42,9 +55,7 @@ class ForgotPasswordAPIView(views.APIView):
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'
from_email = settings.EMAIL_HOST_USER
recipient_list = [email]
send_templated_mail(
template_name='email_reset_verification.email',
@ -102,7 +113,7 @@ class UserLogin(viewsets.ViewSet):
serializer = JuniorSerializer(junior_data)
if user.is_superuser:
serializer = SuperUserSerializer(user)
return custom_response(None, serializer.data, response_status=status.HTTP_200_OK)
return custom_response(SUCCESS_CODE['3003'], serializer.data, response_status=status.HTTP_200_OK)
else:
return custom_error_response(ERROR_CODE["2002"], response_status=status.HTTP_401_UNAUTHORIZED)
except Exception as e:

View File

@ -55,7 +55,7 @@ SUCCESS_CODE = {
# Success code for Thank you
"3002": "Thank you for contacting us! Our Consumer Experience Team will reach out to you shortly.",
# Success code for account activation
"3003": "Your account has been activated.",
"3003": "Log in successfully",
# Success code for password reset
"3004": "Password reset link has been sent to your email address",
# Success code for link verified

View File

@ -11,7 +11,7 @@ router = routers.SimpleRouter()
"""API End points with router"""
router.register('sign-up', SignupViewset, basename='sign-up')
router.register('update-guardian-profile', UpdateGuardianProfile, basename='update-guardian-profile')
router.register('complete-guardian-profile', UpdateGuardianProfile, basename='update-guardian-profile')
urlpatterns = [
path('api/v1/', include(router.urls)),
]

View File

@ -10,7 +10,7 @@ from rest_framework import routers
router = routers.SimpleRouter()
"""API End points with router"""
router.register('profile-update', UpdateJuniorProfile, basename='profile-update')
router.register('complete-junior-profile', UpdateJuniorProfile, basename='profile-update')
router.register('validate-guardian-code', ValidateGuardianCode, basename='validate-guardian-code')
urlpatterns = [
path('api/v1/', include(router.urls)),