我的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"
}
仍然希望有一种方法可以在我的初始请求中获取真实姓名,而不是必须单独的姓名,但这足够好。