Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get user email after OAUTH with Google API Python Client

Tags:

python

oauth

api

I'm currently building a web app interacting with Google API in Python. Using the oauth to get access to the users resources. After successful authentication and upgrade of the token like this:

gd_client = gdata.photos.service.PhotosService()
gd_client.SetAuthSubToken(token)
gd_client.UpgradeToSessionToken()

Then I can access the different feeds of the API and get a list of the users Youtube videos for example. But the user has only logged in with Google and all I have is a oauth token and no other info on the user. How do I retrieve info on the user? Like email, display name and so on? I have been testing a lot of different stuff without managing to solve this...

I found some interesting here: Is there a way to get your email address after authenticating with Gmail using Oauth?

My theory was that I could use the PhotoService.GetAuthSubToken() and then reuse that token to request the contact and get auther.email from the contact entry. Changed the scope of the auth to:

scope = ['https://picasaweb.google.com/data/', 'https://www.google.com/m8/feeds/']

witch returns a roken valid for both services... Any ideas?

like image 428
Kristofer Källsbo Avatar asked Oct 20 '13 02:10

Kristofer Källsbo


People also ask

How can I get OAuth email from Google?

If this scope is included while you generate the refresh token, you should be able to get the email address of the authenticating user by making the following request: https://www.googleapis.com/oauth2/v2/userinfo?access_token="YOUR_ACCESS_TOKEN". You can try this out in the API explorer.

How do I send HTML mail with OAuth2 and Gmail in Python?

Generate and authorize an OAuth2 (generate_oauth2_token) 2. Generate a new access tokens using a refresh token(refresh_token) 3. Generate an OAuth2 string to use for login (access_token) """ import base64 import imaplib import json import smtplib import urllib. parse import urllib.


1 Answers

I just want to add a resource I found to be particularly easier to use. Here it is: link. Kallsbo directed me to a correct location by searching for scope https://www.googleapis.com/auth/userinfo.email. After you already have credentials, simply use the following function taken directly from that link:

    def get_user_info(credentials):
  """Send a request to the UserInfo API to retrieve the user's information.

  Args:
    credentials: oauth2client.client.OAuth2Credentials instance to authorize the
                 request.
  Returns:
    User information as a dict.
  """
  user_info_service = build(
      serviceName='oauth2', version='v2',
      http=credentials.authorize(httplib2.Http()))
  user_info = None
  try:
    user_info = user_info_service.userinfo().get().execute()
  except errors.HttpError, e:
    logging.error('An error occurred: %s', e)
  if user_info and user_info.get('id'):
    return user_info
  else:
    raise NoUserIdException()

Call it user_email = get_user_info(credentials)['email'], and you already have your email there! :)

like image 54
swdev Avatar answered Sep 20 '22 13:09

swdev