You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Passport Google OAuth2调用People API无法获取手机号与地址

问题排查与解决办法

针对你无法通过Google People API获取手机号和地址的问题,以下是具体排查方向和解决步骤:

1. 修正People API请求的用户标识符

你当前使用people/${email.id}作为请求路径,建议替换为people/me——这个标识符会自动关联当前授权的用户,避免因用户ID格式错误导致的请求异常:

// 原代码
const extendedData = yield axios_1.default.get(`https://people.googleapis.com/v1/people/${email.id}?personFields=${urlFields}&access_token=${accessToken}`);

// 修改后
const extendedData = yield axios_1.default.get(`https://people.googleapis.com/v1/people/me?personFields=${urlFields}&access_token=${accessToken}`);

2. 修复PersonFields拼接的语法错误

你的代码中拼接urlFields时,最后会多一个冗余的逗号(比如birthdays,phoneNumbers,),这会导致Google API忽略后面的字段。改用数组收集字段再拼接更可靠:

// 原代码
let urlFields = "";
tokenInfo.data.scope.split(" ").forEach((scope) => {
    if (authorizationObject[scope] !== "")
        urlFields += authorizationObject[scope] + ",";
});
urlFields = urlFields.substring(0, urlFields.length); // 此处未正确移除末尾逗号

// 修改后
const fieldsArray = [];
tokenInfo.data.scope.split(" ").forEach((scope) => {
    const field = authorizationObject[scope];
    if (field) { // 跳过空字符串的scope映射
        fieldsArray.push(field);
    }
});
const urlFields = fieldsArray.join(",");

3. 验证Access Token实际包含的Scope

在代码中打印tokenInfo.data.scope,确认返回的字符串中包含https://www.googleapis.com/auth/user.phonenumbers.read和https://www.googleapis.com/auth/user.addresses.read:

console.log("当前Token包含的Scope:", tokenInfo.data.scope);

如果这两个Scope不存在,说明授权流程中Scope没有正确传递——检查路由和Strategy中的Scope配置是否重复或遗漏,建议统一在路由或Strategy中配置一次即可,避免冲突。

4. 确认Google账户中已填写目标信息

Google People API只会返回用户在Google账户中已填写且允许授权应用访问的信息。请登录你的Google账户,在个人资料页面确认手机号、地址等信息已完整填写,且隐私设置允许第三方应用访问。

在Google开发者控制台的OAuth consent screen中:

  • 确认user.addresses.read和user.phonenumbers.read已添加到Scopes for Google APIs列表中
  • 如果是生产环境(非测试用户),需提交权限审核并通过;测试阶段需确保当前测试账户已加入Test users列表

内容的提问来源于stack exchange,提问作者Adrian Abadán

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:05:42