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.readwww.googleapis.com/auth/user.gender.readwww.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
相关产品推荐
相关产品推荐

