From 019d028cb64d582db7ff57554a838e7d6b1ae21e Mon Sep 17 00:00:00 2001 From: jain Date: Tue, 27 Jun 2023 17:22:59 +0530 Subject: [PATCH] jira-5 google login --- zod_bank/account/serializers.py | 15 +++++++++++++++ zod_bank/account/views.py | 21 +++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/zod_bank/account/serializers.py b/zod_bank/account/serializers.py index 2f18213..4ee88c4 100644 --- a/zod_bank/account/serializers.py +++ b/zod_bank/account/serializers.py @@ -13,6 +13,21 @@ from rest_framework.decorators import action from django.contrib.auth import authenticate, login from rest_framework_simplejwt.tokens import RefreshToken +class GoogleSignInSerializer(serializers.Serializer): + """Google login Serializer""" + + def create(self, validated_data): + """Create or update user model""" + with transaction.atomic(): + print() + if User.objects.filter(email__iexact=self.validated_data['email']).exists(): + return User.objects.get(email__iexact=self.validated_data['email']) + + if not User.objects.filter(email__iexact=self.validated_data['email']).exists(): + instance = User.objects.create(username=self.validated_data['email'], + email=self.validated_data['email']) + return instance + class ResetPasswordSerializer(serializers.Serializer): """Reset Password after verification""" diff --git a/zod_bank/account/views.py b/zod_bank/account/views.py index 5e73a14..a8f25ab 100644 --- a/zod_bank/account/views.py +++ b/zod_bank/account/views.py @@ -8,7 +8,8 @@ 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, ChangePasswordSerializer) + ForgotPasswordSerializer, ResetPasswordSerializer, ChangePasswordSerializer, + GoogleSignInSerializer) from rest_framework_simplejwt.tokens import RefreshToken from base.messages import ERROR_CODE, SUCCESS_CODE from guardian.tasks import generate_otp @@ -23,7 +24,23 @@ from templated_email import send_templated_mail class GoogleLoginAPIViewset(viewsets.ModelViewSet): """Google Login""" - serializer_class = SocialSignInSerializer + serializer_class = GoogleSignInSerializer + + def create(self, request, *args, **kwargs): + """ + Override default behaviour of create method + """ + provider_type = [] + serializer = self.get_serializer(data=request.data) + if serializer.is_valid(raise_exception=True): + provider = self.get_provider_view(request.data.get('provider')) + # if User is not authenticated then send error message + if not provider.is_authenticated(request): + return custom_error_response({}, status.HTTP_400_BAD_REQUEST) + + user = serializer.save() + if User.objects.filter(email__iexact=user.email).exists(): + class ChangePasswordAPIView(views.APIView):