有志者,事竟成!如果你在学习golang,那么本文《无法从 Golang 中的 Google userinfo api 响应访问电话号码(使用 golang.org/x/oauth2 和 Google People API)》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~
问题内容
我用过这个包 “golang.org/x/oauth2” “golang.org/x/oauth2/google”
我尝试通过此代码获取响应正文的输出
var alluser map[string]interface{}
client := getgoogleconfig().client(context.background(), &oauth2.token{accesstoken: accesstoken})
resp2, _ := client.get("https://www.googleapis.com/oauth2/v3/userinfo")
JSON.newdecoder(resp2.body).decode(&alluser)
fmt.println(alluser)
但输出是这样的
map[email:email email_verified:true given_name:name locale:th name:name picture:picturelink sub:somenumber]
这是我的配置代码。 在此配置文件 aand public 中工作正常
*oauth2.Config {
return &oauth2.Config{
ClientID: os.Getenv("GOOGLE_CLIENT_ID"),
ClientSecret: os.Getenv("GOOGLE_CLIENT_SECRET"),
RedirectURL: fmt.Sprintf("%s://%s:%s/api/auth/login/google-callback", os.Getenv("SERVER_PROTOCOL"), os.Getenv("SERVER_HOST"), os.Getenv("SERVER_PORT")),
Scopes: []string{
"profile",
"email",
"www.googleapis.com/auth/user.birthday.read",
"www.googleapis.com/auth/user.gender.read",
"www.googleapis.com/auth/user.phonenumbers.read",
},
Endpoint: google.Endpoint,
}
我已经尝试添加“电话号码”,“生日”仍然没有得到我想要的数据。
chatgpt 说它必须使用另一个包,但“golang.org/x/oauth2/google”不适用于该包?然后我尝试阅读文档但仍然找不到任何东西。无论如何会解决这个问题吗?
正确答案
我认为您无法使用端点“Https://www.googleapis.com/oauth2/v3/userinfo”找到除基本个人资料数据和电子邮件之外的任何信息。
要访问电话号码和其他个人详细信息,您需要使用 Google People API,这样可以更精细地访问用户信息。
具体来说,endpoint "https://people.googleapis.com/v1/people/me?personFields=phoneNumbers" 将提供用户的电话号码。
官方示例在People API Quick-start with Go中。
在你的情况下,它看起来像:
var person struct {
PhoneNumbers []struct {
Value string `json:"value"`
} `json:"phoneNumbers"`
}
client := getGoogleConfig().Client(context.Background(), &oauth2.Token{AccessToken: accessToken})
resp, _ := client.Get("https://people.googleapis.com/v1/people/me?personFields=phoneNumbers")
json.NewDecoder(resp.Body).Decode(&person)
// Loop through the phone numbers if there are multiple
for _, phone := range person.PhoneNumbers {
fmt.Println(phone.Value)
}
创建新的 person 结构来保存响应中的“phonenumbers”字段。然后,向 google people api 发出 get 请求即可获取用户的电话号码。
请注意,返回的电话号码似乎未经过验证(这意味着用户可以在其个人资料中输入任何电话号码)。 google 仅验证用户的主电子邮件地址。
今天关于《无法从 Golang 中的 Google userinfo API 响应访问电话号码(使用 golang.org/x/oauth2 和 Google People API)》的内容介绍就到此结束。