1 回答
TA贡献1875条经验 获得超3个赞
经过一番研究,我发现
生日和性别属性不包含在公共令牌的有效负载中
client.verifyIdToken
函数只是验证idToken
并返回它的有效载荷要获取有关用户的其他信息,在这种情况下,您必须使用
People API
要与 People API 通信,您可以使用googleapis
npm 包,您还必须满足以下条件:
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')
}
}
添加回答
举报