0

私のウェブアプリでは、Googleアカウントでサインイン/サインインすることができます。私はGoogleからのユーザ情報を取得するために、次のコードを使用しています:ノードクライアント経由でGoogle APIから本名を取得する方法

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 protected]', 
    email_verified: true, 
    at_hash: 'some-hash', 
    iss: 'accounts.google.com', 
    iat: 1234567890, 
    exp: 1234567890 } 

答えて

0

id_token(https://developers.google.com/identity/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 protected]", 
    "email_verified": true, 
    "gender": "male", 
    "locale": "en" 
} 

それでもつかむための方法があった希望別のものを作る必要はなく、私の最初の要求の本名ですが、これは十分に機能します。

関連する問題