1 回答
 
                    
                    TA贡献1875条经验 获得超3个赞
经过一番研究,我发现
- 生日和性别属性不包含在公共令牌的有效负载中 
- client.verifyIdToken函数只是验证- idToken并返回它的有效载荷
- 要获取有关用户的其他信息,在这种情况下,您必须使用 - People API
要与 People API 通信,您可以使用googleapisnpm 包,您还必须满足以下条件:
- People API在 Google Developer Console 中添加到您的项目
- 为您对谷歌的 FE 调用添加额外的范围(在我的情况下 - https://www.googleapis.com/auth/user.birthday.read)
- 你必须发送 - idToken到- AccessToken你的后端服务
- 用户必须允许与您的应用程序共享性别 
- 用户的性别必须在用户的谷歌个人资料中设置为公开 
做例子
import { google } from 'googleapis'
import { OAuth2Client } from 'google-auth-library'
export const validateGoogleAccessToken = async (idToken, accessToken) => {
try {
const CLIENT_ID = 'YOUR_GOOGLE_APP_CLIENT_ID'
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',
})
const { birthdays, gender } = data
return {
...payload // email, name, tokens
birthdates, // array of birthdays
genders, // array of genders
}
} catch (error) {
throw new Error('Google token validation failed')
}
}
添加回答
举报
