使用 Sign In with Google+ API(通过 .NET)时,我获取访问令牌,然后使用以下方式获取用户信息:
https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=XXX
这会返回大量用户信息,但不会用户的电子邮件地址。
如果我重新尝试登录(使用完全相同的代码),那么在第二次尝试时,返回的用户信息包含“电子邮件”字段!任何后续登录尝试都会按预期返回电子邮件地址。
请注意,使用范围为:
https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email
有人知道为什么第一次没有返回电子邮件地址吗?
这是一个问题,因为我在第一次尝试时需要电子邮件地址才能创建用户帐户。
这看起来确实很奇怪,尽管它可能与已弃用(并计划在 9 月份删除)的 userinfo 方法有关,以支持使用 plus 端点。由于您已经在使用 plus.login 范围,因此您可以切换为使用 plus.people.get 端点,并且应该更改为使用 email 范围来请求电子邮件信息。
有关这些更改的更多信息,请参阅 https://developers.google.com/+/api/auth-migration。