如何通过Google Access Token获取邮箱地址?接口未返回邮箱ID求助
你遇到的问题核心在于授权阶段没有请求邮箱相关的权限范围(Scope)——Google OAuth 2.0要求必须明确声明需要访问的用户数据权限,否则接口不会返回未授权的字段。下面是具体的解决步骤:
第一步:更新授权请求的Scope
在发起OAuth授权请求时,需要添加email(或等价的https://www.googleapis.com/auth/userinfo.email)到你的scope列表中。比如如果之前你的scope只有profile,现在要修改为:profile email这个scope会告诉Google你需要访问用户的邮箱信息。
第二步:重新获取Access Token
之前的access token是基于旧的scope生成的,不包含邮箱访问权限,所以必须引导用户重新完成授权流程,获取新的access token。第三步:验证结果
用新的access token再次调用https://www.googleapis.com/oauth2/v1/userinfo?access_token=' + token,此时返回的响应应该会包含email字段,类似这样:{
"id": "00000000000000",
"name": "Fred Example",
"given_name": "Fred",
"family_name": "Example",
"picture": "https://lh5.googleusercontent.com/-2Sv-4bBMLLA/AAAAAAAAAAI/AAAAAAAAABo/bEG4kI2mG0I/photo.jpg",
"locale": "en",
"email": "fred.example@gmail.com",
"verified_email": true
}
额外补充:如果后续需要获取更多用户关联信息,也可以考虑使用Google People API的people.get接口,但针对当前需求,调整scope并重新获取token就足够解决问题了。
内容的提问来源于stack exchange,提问作者Mahendra

