2017-08-04 3 views
2

J'ai un bouton personnalisé de connexion à Google dans React (suit les directives de marque) que je dois implémenter dans une application web. L'application android a déjà Google Sign In mis en œuvre avec le BE et nécessite le code d'autorisation à envoyer au BE. Je semble avoir du mal à accéder au code d'autorisation (je peux obtenir le jeton d'accès, id, et id_token assez facilement si).Google OAuth2 JS ne peut pas obtenir le code d'autorisation

en tant que tel que j'initialiser:

static googleInit (googleSignInID) { 
    gapi.load('auth2',() => { 
     ThirdPartyLogInApi.auth2 = gapi.auth2.init({ 
      // Retrieve the singleton for the GoogleAuth library and set up the client. 
      client_id: `${googleSignInID}.apps.googleusercontent.com`, 
     }) 
    }) 
} 

Dans mon React composant, je joins un gestionnaire de clic pour un React ref (comme je l'ai vu dans d'autres problèmes stackoverflow).

componentDidMount() { 
    // element, options, success, failure 
    ThirdPartyLogInApi.auth2.attachClickHandler(
     this.button, 
     {}, 
     this.onGoogleSuccess, 
     this.setProcessingToFalse 
    ); 
} 

Dans le rappel de succès (this.onGoogleSuccess), je suis en mesure d'appeler googleUser.getBasicProfile() pour obtenir des informations d'utilisateur et googleUser.getAuthResponse (true) pour obtenir id_token et access_token, mais je dois le code d'autorisation aussi.

Je suis à bout de nerfs avec la documentation de Google à ce sujet - quelqu'un peut-il me diriger dans la bonne direction? Je ne veux pas changer tout le flux d'auth pour utiliser gapi.auth2.authorize, car j'ai besoin des informations de l'utilisateur.

Merci

EDIT: Est-il même possible d'accéder au code d'autorisation? Il semble que Google fait abstraction de cette étape et renvoie simplement id_token tout de suite. Je dois juste quelque chose qui ressemble à: 4/RQFWJLGd3sJQrgxuRaguzJy2yiUV4fAqVGftRSUYuqc

+0

Salut, avez-vous réussi à comprendre cela? Je suis dans le même bateau que toi. La seule autre façon d'obtenir un code d'autorisation est d'appeler 'auth2.grantOfflineAccess()', mais cela provoque une autre demande de connexion. Il devrait utiliser 'gapi.auth2.init()' ou 'auth2.grantOfflineAccess()'; Je ne sais pas comment m'en tirer avec un seul appel. –

Répondre

0

Je sais que c'est une vieille question, mais je vais poster ma réponse ici pour toute personne ayant des problèmes qui connaissent le même problème.

Le code d'autorisation n'est pas nécessaire pour le back-end si vous disposez déjà d'un jeton d'accès (uniquement si vous utilisez le Google Sign-In button), utilisez simplement le jeton d'accès fourni par googleUser.getAuthResponse().access_token pour faire toutes les demandes de back-end qui ont besoin d'un jeton d'accès .

Voici un exemple pour obtenir tous les alias d'un utilisateur travaillant avec le jeton d'accès.

var options = { 
    'uri': 'https://www.googleapis.com/admin/directory/v1/users/'+userEmail+'/aliases', 
    'method': 'GET', 
    'body': '', 
    'headers': { 
    'Content-Type': 'application/json', 
    'Authorization': 'Bearer '+access_token 
    } 
};