我正在使用自己的个人谷歌账号玩谷歌的Gmail2.0游乐场,但我似乎无法在游乐场上找回我的OAuth地址。
我使用的作用域是:
email profile https://www.googleapis.com/auth/plus.login
但是当我调用API时:
https://www.googleapis.com/oauth2/v2/userinfo
我获得了用户的各种信息,比如姓、名、性别、图片等,但它不会返回用户的电子邮件。
如何检索用户的电子邮件地址?是我的作用域错误还是调用了错误的API?我觉得这应该很简单,但我确实已经尝试了几个小时,但我找不到一个API和作用域组合来一致地提供用户的电子邮件地址。
发布于 2015-04-01 03:52:23
您需要添加https://www.googleapis.com/auth/userinfo.email
作用域或用它替换https://www.googleapis.com/oauth2/v2/userinfo
。如果您使用的是他们提供的HTML示例,则可以列出由空格分隔的多个作用域。
<span
class="g-signin"
data-callback="signInCallback"
data-clientid="{{ plus_id }}"
data-cookiepolicy="single_host_origin"
data-requestvisibleactions="http://schemas.google.com/AddActivity"
data-scope="https://www.googleapis.com/auth/plus.login
https://www.googleapis.com/auth/userinfo.email">
</span>
发布于 2018-07-12 08:53:37
要使用OAuth 2.0登录谷歌,不需要单独请求获取用户的电子邮件。
当Google调用回调URL时,它在查询字符串中提供一个code
,您可以使用该URL来交换访问令牌和ID令牌。ID令牌是一个JWT,它包含有关用户的身份信息,其中包括电子邮件地址。
更多信息请点击这里:https://developers.google.com/identity/protocols/oauth2/openid-connect
发布于 2020-07-07 01:07:22
要检索电子邮件地址,您需要包括本文档中提到的作用域:"https://www.googleapis.com/auth/userinfo.email“。如果在生成刷新令牌时包含此作用域,则应该能够通过发出以下请求来获取身份验证用户的电子邮件地址:
您可以使用自己的访问令牌调用它,然后将给出响应
https://www.googleapis.com/oauth2/v3/userinfo?access_token="YOUR_ACCESS_TOKEN"
响应将如下所示
{
"sub": "1057abc98136861333615xz",
"name": "My Name",
"given_name": "My",
"family_name": "Name",
"picture": "https://lh3.googleusercontent.com/a-/AOh14qiJarwP9rRw7IzxO40anYi4pTTAU_xseuRPFeeYFg",
"email": "MyName@gmail.com",
"email_verified": true,
"locale": "en"
}
或者,您可以只编写一个函数
import requests
def get_user_email(access_token):
r = requests.get(
'https://www.googleapis.com/oauth2/v3/userinfo',
params={'access_token': access_token})
return r.json()
https://stackoverflow.com/questions/24442668
复制相似问题