如何通过节点客户端从Google API获取真实名称



我的Web应用程序允许使用Google帐户注册/登录。我正在使用以下代码从Google获取用户信息:

var scopes = ['profile', 'email'];
var url = oauth2Client.generateAuthUrl({ access_type: 'offline', scope: scopes });
router.route('/authorize').post((req, res) => {
  code = req.body.code;
  oauth2Client.getToken(code, (err, tokens) => {
    if (err) return // error handler
    oauth2Client.verifyIdToken(tokens.id_token, clientId, (err, login) => {
      if (err) return // error handler
      console.log(login.getPayload()); // this gives me the JSON object below
    });
  });
});

我已经尝试添加不同的范围,但是我总是获得相同的信息,其中不包括用户的真实名称:

{ azp: 'stuffblahblah',
  aud: 'stuffblahblah',
  sub: 'google-id-here',
  email: 'email@address.com',
  email_verified: true,
  at_hash: 'some-hash',
  iss: 'accounts.google.com',
  iat: 1234567890,
  exp: 1234567890 }

尽管有一些文档表明可以在ID_TOKEN中获取诸如真实名称的信息(请参阅https://developers.google.com/inentity/indity/sideity/sign-in/sign-in/android/backend-auth),我无法通过.gettoken方法返回该信息。但是,我能够通过通过访问令牌在单独的请求中请求信息来获取它:

let url = 'https://www.googleapis.com/oauth2/v3/userinfo?access_token=' + access_token;
request(url, (err, response, body) => {
  if (err) console.log('error');
  console.log(body);
});

,身体看起来像这样:

{ 
  "sub": "4319874317893142", 
  "name": "My Real name", 
  "given_name": "My First Name",
  "family_name": "My Last Name",
  "profile": "https://plus.google.com/link_to_my_profile",
  "picture": "https://lh4.googleusercontent.com/link_to_my_pic.jpg",
  "email": "email@address.com",
  "email_verified": true,
  "gender": "male",
  "locale": "en"
}

仍然希望有一种方法可以在我的初始请求中获取真实姓名,而不是必须单独的姓名,但这足够好。

最新更新