使用Oauth通过Gmail验证后,有没有办法获取您的电子邮件地址?

时间:2011-08-07 04:47:24

标签: python oauth gmail imap

在Python Web应用程序中,我可以使用OAuth和IMAP连接到Gmail。 OAuth使用您当前登录的任何Google帐户,并要求您授予对该网络应用的访问权限。但是,它不提供实际检索该帐户的电子邮件地址的API。

问题是,即使用户使用OAuth授予访问权限,要与Gmail进行交互,您仍需要在IMAP连接网址中明确提供电子邮件地址:

https://mail.google.com/mail/b/[your-email]/imap/

因此,网络应用程序必须询问用户他们的电子邮件地址要求他们通过OAuth授予Gmail访问权限。更糟糕的是,他们输入的电子邮件地址可能与他们授予访问权限的帐户的电子邮件不匹配,导致应用程序失败。

有没有办法使用OAuth获取您的电子邮件地址,以便您可以将其放入该网址而无需向用户询问?我尝试查看this answer,但只要我同时使用Bad Requesthttps://mail.google.com/作为我的范围,Google就会返回https://www.googleapis.com/auth/userinfo#email

2 个答案:

答案 0 :(得分:4)

你所追求的是Google Contacts API。如果您通过OAuth进行授权,那么您当前可能会要求获得访问gmail范围的权限:

https://mail.google.com/mail/feed/atom

您还需要申请联系人范围的许可:

https://www.google.com/m8/feeds/

完成后,您可以发出类似于以下内容的GET请求:

https://www.google.com/m8/feeds/contacts/default/full?max-results=1

这应该返回一堆xml,这里有一些相关的位:

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gContact="http://schemas.google.com/contact/2008" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;CEcMRX0_eCp7ImA9WhdRF00.&quot;">
<id>joebloggs@gmail.com</id>
...
<author>
  <name>Joe Bloggs</name>
  <email>joebloggs@gmail.com</email>
</author>
...
</feed>

如您所见,您可以在几个地方找到授权用户的电子邮件。

如果您正在使用OAuth,您可能还想查看Google OAuth游乐场,我发现它非常方便:http://googlecodesamples.com/oauth_playground/index.php。如果您决定使用OAuth2,则https://code.google.com/oauthplayground

上有相应的工具

答案 1 :(得分:1)

skorks回答工作得很好但你应该使用正确的API。通过添加额外的范围

https://www.googleapis.com/auth/userinfo.email

你以“正确的方式”做到了!

我用示例代码写了一篇关于此的完整文章:http://www.hackviking.com/2013/10/python-get-user-info-after-oauth/ 可在此处获取代码:https://code.google.com/p/google-api-oauth-demo/