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

Golang中使用oauth2无法从Google userinfo API获取手机号

解决方案

问题本质

你调用的 https://www.googleapis.com/oauth2/v3/userinfo 接口本身就不返回手机号、生日、性别这类敏感个人数据——哪怕你加了对应的授权scope也没用,这类数据得通过Google People API来获取。

具体解决步骤

1. 依赖兼容性说明

golang.org/x/oauth2/google 完全兼容Google People API,不需要换其他包,只要你的OAuth配置已经包含这些scope就可以:

  • www.googleapis.com/auth/user.birthday.read
  • www.googleapis.com/auth/user.gender.read
  • www.googleapis.com/auth/user.phonenumbers.read
  • 保留原有的 profile、email

2. 替换接口调用代码

把原来调用userinfo的逻辑改成调用People API的 people/me 端点,并且指定需要获取的字段:

import (
    "context"
    "encoding/json"
    "fmt"
    "golang.org/x/oauth2"
    "golang.org/x/oauth2/google"
)

func getUserFullData(accessToken string) error {
    // 复用你已有的getGoogleConfig()函数获取配置
    client := getGoogleConfig().Client(context.Background(), &oauth2.Token{AccessToken: accessToken})
    
    // 调用People API,明确指定要获取的字段
    resp, err := client.Get("https://people.googleapis.com/v1/people/me?personFields=birthdays,genders,phoneNumbers,emailAddresses,names")
    if err != nil {
        return err
    }
    defer resp.Body.Close()

    var result map[string]interface{}
    if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
        return err
    }

    fmt.Println("完整用户数据:", result)
    return nil
}

3. 关键注意点

  • 先去Google Cloud控制台的API库中启用People API,否则会返回权限错误;
  • 手机号、生日这类数据需要用户明确授权,而且如果用户没填写或者设置了隐私权限,返回结果里可能没有对应字段,要做好空值判断。

内容的提问来源于stack exchange,提问作者Dewvie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:07:15