Javascript Google People Api:地址字段中未返回国家/地区
我正试图通过在People Api请求中指定指定的“addresses”(地址)字段来获取经过身份验证的用户的国家/地区。 代码如下:Javascript Google People Api:地址字段中未返回国家/地区,javascript,oauth,google-signin,google-authentication,google-people-api,Javascript,Oauth,Google Signin,Google Authentication,Google People Api,我正试图通过在People Api请求中指定指定的“addresses”(地址)字段来获取经过身份验证的用户的国家/地区。 代码如下: router.post("/test_scope", (req, res) => { const { idToken, accessToken } = req.body; authenticationServices .validateGoogleAccessToken(idToken, accessToken)
router.post("/test_scope", (req, res) => {
const { idToken, accessToken } = req.body;
authenticationServices
.validateGoogleAccessToken(idToken, accessToken)
.then((response) => {
res.json(response);
});
});
const validateGoogleAccessToken = async (idToken, accessToken) => {
try {
const CLIENT_ID =
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com";
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,addresses",
});
const { birthdays, genders, addresses, ageRanges } = data;
return data;
} catch (error) {
console.log("error: ", error);
throw new Error("Google token validation failed");
}
};
我已在我用于登录的帐户中设置如下:
这是我发送请求后得到的全部响应:
{
"resourceName": "people/XXXXXXXXXXXXXXXXx",
"etag": "%XXXXXXXXXXXXXXXXXXXXXXXXXX",
"genders": [
{
"metadata": {
"primary": true,
"source": {
"type": "PROFILE",
"id": "XXXXXXXXXXXXXXXXXXXX"
}
},
"value": "female",
"formattedValue": "Female"
}
],
"birthdays": [
{
"metadata": {
"primary": true,
"source": {
"type": "PROFILE",
"id": "1XXXXXXXXXXXXXXXXXXXXXXXX"
}
},
"date": {
"month": 8,
"day": 9
}
},
{
"metadata": {
"source": {
"type": "ACCOUNT",
"id": "XXXXXXXXXXXXXXXXXXXXXXx"
}
},
"date": {
"year": 1996,
"month": 8,
"day": 9
}
}
],
"addresses": [
{
"metadata": {
"primary": true,
"source": {
"type": "PROFILE",
"id": "111110367350060808978"
}
},
"formattedValue": "XXXXXXXXXXXXX, XXXXX, XXXXX",
"type": "home",
"formattedType": "Home"
}
],
}
正如您所看到的,“地址”中缺少国家/地区字段
注意:在用户单击登录按钮后,我正在从前端检索
idToken
和accessToken
:
import GoogleLogin from "react-google-login";
export class LoginPage extends Component {
onGoogleSignInSucceeded(response) {
const { accessToken, tokenId } = response;
}
render() {
const { errors } = this.state;
return (
<>
<GoogleLogin
clientId="XXXXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"
scope="https://www.googleapis.com/auth/user.birthday.read https://www.googleapis.com/auth/user.gender.read https://www.googleapis.com/auth/user.addresses.read"
// IMPORTANT
// https://developers.google.com/people/api/rest/v1/people/get#authorization-scopes
buttonText="Sign-in with your Google account"
onSuccess={this.onGoogleSignInSucceeded}
onFailure={this.onGoogleSignInFailed}
cookiePolicy={"single_host_origin"}
/>
</>
);
}
}
从“反应谷歌登录”导入谷歌登录;
导出类LoginPage扩展组件{
ONGOOGLESIGNSUCCESS(响应){
const{accessToken,tokenId}=response;
}
render(){
const{errors}=this.state;
返回(
);
}
}
地址字段上的所有字段都是可选的()。这还包括国家/地区。也不能保证数据实际上是正确的(用户可以将无效数据添加到他们的google配置文件中),因此请注意这一点,并检查已验证的元数据()
也就是说,您可以尝试使用地理编码API从格式化地址获取国家/地区
还请注意,还有其他字段可能包含地址。例如,位置
()可以包含有关他们居住地点的信息。您能告诉我们更多有关为什么需要验证用户国家的信息吗?@Martí我需要这些信息将其保存在数据库中