def google(request): access_token_url = 'https://accounts.google.com/o/oauth2/token' people_api_url = 'https://www.googleapis.com/plus/v1/people/me/openIdConnect' payload = { 'client_id': request.data['clientId'], 'redirect_uri': request.data['redirectUri'], 'client_secret': settings.GOOGLE_SECRET, 'code': request.data['code'], 'grant_type': 'authorization_code' } # Step 1. Exchange authorization code for access token. r = requests.post(access_token_url, data=payload) token = json.loads(r.text) headers = {'Authorization': 'Bearer {0}'.format(token['access_token'])} # Step 2. Retrieve information about the current user. r = requests.get(people_api_url, headers=headers) profile = json.loads(r.text) current_user = request.jwtuser user = User.objects.get(pk=current_user.id) if user is None: print "NO USER!!" ### MAKE A NEW USER!!! if hasattr( user, 'useraccounts' ): print "HAS ACCOUNTS" accounts = user.useraccounts accounts.google = True accounts.google_code = request.data['code'] accounts.google_token = token['access_token'] accounts.google_id = profile["sub"] accounts.google_name = profile["name"] accounts.google_email = profile["email"] accounts.save() else: print "NO ACCOUNTS" accounts = UserAccounts() accounts.user = user accounts.google = True accounts.google_code = request.data['code'] accounts.google_token = token['access_token'] accounts.google_id = profile["sub"] accounts.google_name = profile["name"] accounts.google_email = profile["email"] accounts.save() user.useraccounts = accounts user.save() print user.useraccounts profile["token"] = request.jwtauth pprint(profile) return Response(profile)