Exemple #1
0
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)