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?
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.
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.
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! :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With