根据 user_id 获取 Google 帐户电子邮件地址
Get Google Account email address based on user_id
基于@bossylobster 的 this answer,我已经成功地实现了一个与 GMail API 连接的 cron 作业。目前我的代码中有 user_id 和电子邮件地址,但是我正在构建一个应用程序,它应该 运行 通过用户列表。
这种情况下的问题是,当我 运行 在 CredentialsModel 上循环时,我没有用户的电子邮件地址。由于我使用的是 webapp 2 中的用户模型(基于 this tutorial),因此我也无法在任何地方查找此 ID(据我所知)。
如果我能以某种方式检索带有 user_id 和凭据的电子邮件地址,或者在授予权限时将电子邮件地址和 user_id 保存在用户模型中...是处理这个问题的最佳方式吗?
我的授权码:
http = httplib2.Http(memcache)
service = discovery.build("gmail", "v1", http=http)
decorator = OAuth2Decorator(client_id=settings.CLIENT_ID,
client_secret=settings.CLIENT_SECRET,
scope=settings.SCOPE)
class getPermissions(webapp2.RequestHandler):
@decorator.oauth_aware
def get(self):
template_values = {
'url': decorator.authorize_url(),
'has_credentials': decorator.has_credentials()
}
self.response.out.write(template.render('templates/auth.html', template_values))
您可以使用 userId="me" 调用 Gmail API,这意味着,只需使用凭据中经过身份验证的用户的 userId -- 不需要指定电子邮件 address/userId. c.f。文档中 userId 字段的描述:
https://developers.google.com/gmail/api/v1/reference/users/labels/list
Gmail API-具体方法
您可以致电 users.getProfile() 获取用户的电子邮件地址:
user_profile = service.users().getProfile(userId='me').execute()
user_email = user_profile['emailAddress']
此方法的优点是不需要您添加任何额外的 API 范围。
通用方法
如果您将 email
添加到您的 OAuth 范围列表,那么您的凭据对象将包含用户的电子邮件地址:
try:
print credentials.id_token['email']
except KeyError:
print 'Unknown email'
基于@bossylobster 的 this answer,我已经成功地实现了一个与 GMail API 连接的 cron 作业。目前我的代码中有 user_id 和电子邮件地址,但是我正在构建一个应用程序,它应该 运行 通过用户列表。
这种情况下的问题是,当我 运行 在 CredentialsModel 上循环时,我没有用户的电子邮件地址。由于我使用的是 webapp 2 中的用户模型(基于 this tutorial),因此我也无法在任何地方查找此 ID(据我所知)。
如果我能以某种方式检索带有 user_id 和凭据的电子邮件地址,或者在授予权限时将电子邮件地址和 user_id 保存在用户模型中...是处理这个问题的最佳方式吗?
我的授权码:
http = httplib2.Http(memcache)
service = discovery.build("gmail", "v1", http=http)
decorator = OAuth2Decorator(client_id=settings.CLIENT_ID,
client_secret=settings.CLIENT_SECRET,
scope=settings.SCOPE)
class getPermissions(webapp2.RequestHandler):
@decorator.oauth_aware
def get(self):
template_values = {
'url': decorator.authorize_url(),
'has_credentials': decorator.has_credentials()
}
self.response.out.write(template.render('templates/auth.html', template_values))
您可以使用 userId="me" 调用 Gmail API,这意味着,只需使用凭据中经过身份验证的用户的 userId -- 不需要指定电子邮件 address/userId. c.f。文档中 userId 字段的描述: https://developers.google.com/gmail/api/v1/reference/users/labels/list
Gmail API-具体方法
您可以致电 users.getProfile() 获取用户的电子邮件地址:
user_profile = service.users().getProfile(userId='me').execute()
user_email = user_profile['emailAddress']
此方法的优点是不需要您添加任何额外的 API 范围。
通用方法
如果您将 email
添加到您的 OAuth 范围列表,那么您的凭据对象将包含用户的电子邮件地址:
try:
print credentials.id_token['email']
except KeyError:
print 'Unknown email'