Google People Api:地址字段返回“未定义”

问题描述

我试图通过在 People Api 请求中指定 here 中的“地址”字段来获取经过身份验证的用户国家/地区。 这是代码

router.post("/test_scope",(req,res) => {
  const { idToken,accesstoken } = req.body;
  authenticationServices
    .validateGoogleAccesstoken(idToken,accesstoken)
    .then((response) => {
      res.json(response);
    });
});


const validateGoogleAccesstoken = async (idToken,accesstoken) => {
  try {
    const CLIENT_ID =
      "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com";
    const client = new oauth2client(CLIENT_ID);

    const ticket = await client.verifyIdToken({
      idToken,audience: CLIENT_ID,});

    const payload = ticket.getPayload();

    const { OAuth2 } = google.auth;
    const oauth2client = new OAuth2();
    oauth2client.setCredentials({ access_token: accesstoken });

    const peopleAPI = google.people({
      version: "v1",auth: oauth2client,});

    const { data } = await peopleAPI.people.get({
      resourceName: "people/me",personFields: "birthdays,genders,ageRanges,addresses",});

    const { birthdays,addresses,ageRanges } = data;

    console.group("AuthenticationServices.validateGoogleAccesstoken");
    console.log("birthdays: ",birthdays); // returned correctly
    console.log("genders: ",genders); // returned correctly
    console.log("ageRanges: ",ageRanges); // returned correctly
    console.log("addresses: ",addresses); // undefined
    console.groupEnd();
    return data;
  } catch (error) {
    console.log("error: ",error);
    throw new Error("Google token validation Failed");
  }
};

此处请求所有字段:

personFields: "birthdays,

正确返回,除了记录为未定义的地址字段。
这是我发送请求后得到的整个响应:

{
  "resourceName": "people/XXXXXXXXXXXXXXXXx","etag": "%XXXXXXXXXXXXXXXXXXXXXXXXXX","genders": [
      {
          "Metadata": {
              "primary": true,"source": {
                  "type": "PROFILE","id": "XXXXXXXXXXXXXXXXXXXX"
              }
          },"value": "female","formattedValue": "Female"
      }
  ],"birthdays": [
      {
          "Metadata": {
              "primary": true,"id": "1XXXXXXXXXXXXXXXXXXXXXXXX"
              }
          },"date": {
              "month": 8,"day": 9
          }
      },{
          "Metadata": {
              "source": {
                  "type": "ACCOUNT","id": "XXXXXXXXXXXXXXXXXXXXXXx"
              }
          },"date": {
              "year": 1996,"month": 8,"day": 9
          }
      }
  ],"ageRanges": [
      {
          "Metadata": {
              "primary": true,"id": "XXXXXXXXXXXXXXXXXXXXXXXXX"
              }
          },"ageRange": "TWENTY_ONE_OR_OLDER"
      }
  ]
}

如您所见,缺少地址字段。


注意:用户点击登录按钮后,我正在从前端检索 idTokenaccesstoken

import GoogleLogin from "react-google-login";

export class LoginPage extends Component {
  onGoogleSignInSucceeded(response) {
    const { accesstoken,tokenId } = response;
  }
  render() {
    const { errors } = this.state;
    return (
      <>
        <GoogleLogin
          clientId="XXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"
          scope="https://www.googleapis.com/auth/user.birthday.read https://www.googleapis.com/auth/user.gender.read https://www.googleapis.com/auth/user.addresses.read"
          // IMPORTANT
          // https://developers.google.com/people/api/rest/v1/people/get#authorization-scopes
          buttonText="Sign-in with your Google account"
          onSuccess={this.onGoogleSignInSucceeded}
          onFailure={this.onGoogleSignInFailed}
          cookiePolicy={"single_host_origin"}
        />
      </>
    );
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)