googleapis.com/oauth2/v2/userinfo返回空值

时间:2019-03-05 12:35:37

标签: api migration google-plus google-signin

我一直用于Google的以下URL登录我的网站。

登录URL

https://accounts.google.com/o/oauth2/auth?scope='.urlencode('https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email') . '&redirect_uri=' . urlencode(CLIENT_REDIRECT_URL) . '&response_type=code&client_id=' . CLIENT_ID . '&access_type=online

访问令牌URL

https://accounts.google.com/o/oauth2/token

UserInfo终结点URL(新URL)

https://www.googleapis.com/oauth2/v2/userinfo (returns null values)

我当前正在使用的Google+端点URL

https://www.googleapis.com/plus/v1/people/me (returns email, names, etc)

我想获取用户名和电子邮件以保存在数据库中。 如何获得上面提到的具有UserInfo端点URL的名称和电子邮件?

2 个答案:

答案 0 :(得分:0)

根据您链接的示例代码,至少需要进行一些更改。

首先,您可能需要请求不同的范围,因为范围确定了将返回的内容。该代码依赖于无效或不再建议的范围。您用于获取个人资料和电子邮件的scopes为:

  • openid
  • 个人资料
  • 电子邮件

(您使用应该更长的作用域名称也可以,但是您可能也想尝试使用这些更简单的名称。)

因此,第2步中的login_url可能看起来像这样:

$login_url = 'https://accounts.google.com/o/oauth2/v2/auth?scope=' . urlencode('openid profile email') . '&redirect_uri=' . urlencode(CLIENT_REDIRECT_URL) . '&response_type=code&client_id=' . CLIENT_ID . '&access_type=online';

尽管userinfo v2端点仍处于半维护状态,但已弃用。 相反,请尝试以下操作之一:

但是,仍有一些事情要注意:

  • 并非所有数据都可用。如果用户尚未设置一些个人资料信息,则该API无法提供该信息。
  • 字段将与Plus端点中的字段不同。因此,尽管数据可能在那里,但它可能位于返回的对象中的其他位置。

答案 1 :(得分:0)

访问令牌URL if (d % 1 == 0) { Console.WriteLine(String.Format("{0:0.0}", d)); } else { Console.WriteLine(d); } (返回空值)

您应提供有效的凭据,以得到these openid endpoint的回复

通过Authorization标头或QueryParams;例如:

https://www.googleapis.com/oauth2/v2/userinfo

https://www.googleapis.com/oauth2/v2/userinfo?access_token=FOO_BAR... access_tokenid_token

也适用于token_handlev3

相关问题