def post(self, request, *args, **kwargs): """ Authenticate user through the provider and access_token """ serializer = self.serializer_class(data=request.data) serializer.is_valid(raise_exception=True) provider = serializer.data.get('provider', None) # Check is invalid provider if not socials.is_valid_provider(provider): raise InvalidProvider() # Check valid token access_token = serializer.data.get('access_token', None) user_data = socials.get_user_info(provider, access_token) # None value mean the access token is not valid if not user_data: raise InvalidAccessToken() # Check the case can not get user email address if not user_data.get('email'): raise MissingEmail() # Create user if not exist User = get_user_model() try: user = User.objects.get(email=user_data['email']) except User.DoesNotExist: user = User.objects.create( username=user_data['email'], email=user_data['email'], first_name=user_data.get('first_name'), last_name=user_data.get('last_name'), ) # Always verified user if they using Google or Facebook set_user_verified(user) # Update last logged in update_last_login(None, user) data = get_user_profile_data(user) return Response(data, status=status.HTTP_200_OK)
def test_enable_facebook_login(self): self.assertTrue(socials.is_valid_provider(constants.FACEBOOK_PROVIDER))
def test_enable_google_login(self): self.assertTrue(socials.is_valid_provider(constants.GOOGLE_PROVIDER))
def test_in_valid_provider(self): self.assertFalse(socials.is_valid_provider('something'))