Node.js Can';t使用google People API获取用户google帐户性别和生日字段。(使用OAuth2client)

Node.js Can';t使用google People API获取用户google帐户性别和生日字段。(使用OAuth2client),node.js,flutter,oauth-2.0,google-signin,google-people-api,Node.js,Flutter,Oauth 2.0,Google Signin,Google People Api,我正在我的手机颤振应用程序中使用谷歌进行身份验证。我在我的应用程序中获得了access_令牌,然后将其发送到使用Node.js编写的后端。然后我需要获取用户基本信息+生日和性别。在谷歌云平台控制台中,我做了所有配置,添加了某些作用域,https://www.googleapis.com/auth/user.birthday.read', 'https://www.googleapis.com/auth/user.gender.read“,。我启用了GooglePeopleAPI

我正在我的手机颤振应用程序中使用谷歌进行身份验证。我在我的应用程序中获得了access_令牌,然后将其发送到使用Node.js编写的后端。然后我需要获取用户基本信息+生日和性别。在谷歌云平台控制台中,我做了所有配置,添加了某些作用域,https://www.googleapis.com/auth/user.birthday.read', 'https://www.googleapis.com/auth/user.gender.read“,。我启用了GooglePeopleAPI。但我仍然不能得到生日和性别。这里是来自的后端部分

const token =
  "HARDCODED_ACCESS_TOKEN";

var google = require("googleapis").google;
var OAuth2 = google.auth.OAuth2;
var oauth2Client = new OAuth2();

oauth2Client.setCredentials({
  access_token: token,
  scope: "https://www.googleapis.com/auth/user.gender.read",
});

var oauth2 = google.oauth2({
  auth: oauth2Client,
  version: "v2",
});

oauth2.userinfo.get(function (err, res) {
  if (err) {
    console.log(err);
  } else {
    console.log(res.data);
  }
});
这是我得到的回应


我几乎尝试了所有方法,但仍然无法获取性别和生日信息。

为了从经过身份验证的用户那里获取有关性别和生日的信息,您可以使用
resourceName=People/me
personfeelds=genders,birthdays
调用People API:

oauth2Client.setCredentials({
  access_token: token,
});
const service = google.people({version: 'v1', auth: oauth2Client});
service.people.get({
  resourceName: 'people/me',
  personFields: 'genders,birthdays'
}, (err, res) => {
  // Do your thing
});
笔记:
  • 您没有为大多数身份验证过程提供代码,但请注意,在检索
    access\u令牌之前必须提供作用域,因为访问令牌依赖于这些作用域。另外,我建议您设置一个
    刷新\u令牌
    ,因为
    访问\u令牌
    将在一小时后过期。有关OAuth进程的更多信息,请查看
  • 假定已验证用户的帐户中同时添加了
    性别
    生日

这就是您使用的全部代码吗?您提供的代码中未使用People API。你能澄清一下吗?如果我没有错,为了获取用户基本信息、性别、生日等,你需要在GCP中启用人员API,并使用它。所以在我的例子中,我认为它在幕后使用了People API。但是你有没有其他更好更有效的方法呢?我很高兴知道。(1)您使用的
userinfo
端点不是People API的一部分,这是两个不同的API,它不是“在幕后使用”。(2)您确定您已将此信息(性别、生日)添加到您的帐户中吗
userinfo
端点至少应该检索
性别
信息,但这不是您得到的响应的一部分,这让我认为您的帐户中没有指定该信息,(3)如果您想要检索
生日
,您需要使用People API。我可以提供一个答案解释如何做到这一点,但首先请考虑澄清我提到的问题。首先谢谢你的答案。是的,如果你想在我的谷歌账户中提供信息,是的,我做到了,我也公开了。但仍然没有结果。您知道使用access\u令牌获取用户数据的另一种方法吗?您是如何检索此access\u令牌的?硬编码肯定不是首选的OAuth流。好的,非常感谢。现在我正在做另一个项目,但明天我会试试你提供的。如果有效,我会将其标记为已解决:)对不起,因为太忙,我现在无法尝试此解决方案,但我会将其标记为已解决。如果我以后有问题,我会让你知道的。非常感谢。