def google_oauth_callback(request): state = request.GET['state'] credentials = Google.exchange_code(request.GET['code'], state) if state == 'login': profile_str = Google.get_profile(credentials) profile = json.loads(profile_str) try: user = MyUser.objects.get(email=profile['email']) except ObjectDoesNotExist: user = None if user is None: user = MyUser(name=profile['name'], email=profile['email'], picture_url=profile['picture']) user.save() request.session['user_id'] = user.id return redirect(reverse('connect_apps')) elif state == 'gmail': # store gmail oauth credentials in db try: gmail_auth = Gmail.objects.get(user__id=request.session['user_id']) except ObjectDoesNotExist: gmail_auth = None if gmail_auth is None: user = MyUser.objects.get(id=request.session['user_id']) gmail_auth = Gmail(user=user, credentials_json=credentials.to_json()) gmail_auth.save() else: gmail_auth.credentials_json = credentials.to_json() gmail_auth.save() return redirect(reverse('close_window'))