0

Meine Web-App ermöglicht die Anmeldung/Anmeldung mit einem Google-Konto. Ich verwende den folgenden Code eines Benutzer Informationen von Google zu erhalten:So erhalten Sie den richtigen Namen von Google API über den Knoten-Client

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 
    }); 
    }); 
}); 

Ich habe versucht, indem verschiedene Bereiche, aber ich bekomme immer nur die gleichen Informationen, die nicht den wirklichen Namen des Benutzers nicht enthalten:

{ 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 } 

Antwort

0

Trotz einiger Dokumentation, die darauf hindeutet, dass es möglich ist, Informationen wie den richtigen Namen im id_token zu erhalten (siehe https://developers.google.com/identity/sign-in/android/backend-auth), konnte ich es nicht mit der .getToken-Methode zurückgeben. Aber ich war in der Lage, es zu erhalten, indem die Informationen in einer separaten Anfrage über das Zugriffstoken anfordernden:

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); 
}); 

Und der Körper sieht wie folgt aus:

{ 
    "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" 
} 

Noch will es ein Weg zu greifen der richtige Name in meiner ursprünglichen Anfrage, anstatt einen separaten zu machen, aber das funktioniert gut genug.

Verwandte Themen