为Google OAuth2 WebServerFlow保存用户名



我已经在Python中实现了Google的OAuth2过程(参见此链接获取关于使用OAuth2WebServerFlow的教程:https://developers.google.com/api-client-library/python/guide/aaa_oauth),但无法确定如何捕获我的身份验证用户是谁。例如,他们的电子邮件地址是什么?否则,当我保存他们的OAuth2凭据时,我不知道凭据属于谁。auth_uri、flow或凭据对象中没有任何内容提供身份验证用户的电子邮件地址。我的代码中的倒数第二行打印出带有OAuth2Credentials类(http://google-api-python-client.googlecode.com/hg/docs/epy/oauth2client.client.OAuth2Credentials-class.html)密钥的JSON

任何想法?我无法想象我必须直接向身份验证用户询问他们的帐户信息…

我正在使用新的GMail API构建一个应用程序,需要离线访问用户的帐户。

class Auth(app.basic.BaseHandler):
    def get(self):
    flow = OAuth2WebServerFlow(client_id=settings.get('google_client_id'),
                       client_secret=settings.get('google_client_secret'),
                       scope=OAUTH_SCOPE,
                       redirect_uri='http://localhost:8001/auth/google/return')
    auth_uri = flow.step1_get_authorize_url()
    return self.redirect(auth_uri)
class AuthReturn(app.basic.BaseHandler):
   def get(self):
   oauth_code = self.get_argument('code', '')
   flow = OAuth2WebServerFlow(client_id=settings.get('google_client_id'),
                       client_secret=settings.get('google_client_secret'),
                       scope=OAUTH_SCOPE,
                       redirect_uri='http://localhost:8001/auth/google/return')
   credentials = flow.step2_exchange(oauth_code)
   # Save credentials to database. How do I get the username?
   print credentials.to_json()
   return self.redirect('/')

解决方案在您请求的范围内。我定义了一个OAUTH_SCOPE变量

OAUTH_SCOPE = 'https://www.googleapis.com/auth/gmail.modify'

但是这个作用域只给你GMail API定义的信息,不包括用户配置信息。因此,要扩展凭据所提供的内容,必须扩展身份验证请求的范围:

OAUTH_SCOPE = ('https://www.googleapis.com/auth/gmail.modify '
          'https://www.googleapis.com/auth/userinfo.email '
          'https://www.googleapis.com/auth/userinfo.profile')

使用这个作用域变量运行完全相同的代码将使您能够访问userinfo。电子邮件和用户信息。给我发邮件,包括我需要的所有东西。注意,scope参数是一个空格分隔的字符串。它实际上非常优雅!

相关内容

  • 没有找到相关文章

最新更新