2015-04-21 15 views
13

Ho una semplice pagina singola webapp javascript che utilizza "Google di accesso per i siti web": https://developers.google.com/identity/sign-in/web/sign-inCome ottenere il token di accesso dall'SDK JavaScript di accesso a Google?

Come posso ottenere un token di accesso per l'utente? Ho bisogno di un'affermazione verificabile dell'identità dell'utente sul mio server. Non voglio l'accesso offline; Voglio solo sapere che quando il client web invia una richiesta Ajax al mio server, posso fidarmi dell'identità dell'utente connesso.

risposta

35

A scopo di verifica, sarebbe meglio usare il id_token che fa parte della risposta di autenticazione, e può essere recuperato in qualsiasi momento come questo:

gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().id_token 

L'API di Google librerie client offrono funzioni per verificare la id_token e fornisci le informazioni utente associate sul lato server: https://developers.google.com/api-client-library/

+1

Ancora una volta sei un eroe. Ho passato circa due ore la scorsa notte non riuscendo a trovare questo piccolo frammento nella documentazione. Grazie. – stickfigure

+2

@stickfigure se sei interessato, ho scritto anche un articolo sull'accesso lato server con la nuova API Identity oggi, dato che c'erano diverse domande in arrivo e i documenti non sono ancora così esaurienti su di esso: http://codingwithgerwin.blogspot.co.at/2015/04/google-sign-in-20-server-side.html – Scarygami

+1

Grande articolo, spero che venga indicizzato rapidamente :) – stickfigure

-1

Spero che stiate bene. Ecco la soluzione, si può provare questo: In realtà non esiste un nome di funzione come getAccessToken (solo Android) definire in GoogleSignin.android.js come scritto qui https://github.com/devfd/react-native-google-signin. Ma la parte migliore è che hanno già implementato la soluzione in GoogleSignin.android.js. basta dare un'occhiata al codice qui sotto da GoogleSignin.android.js

currentUserAsync() { 
return new Promise((resolve, reject) => { 
    const sucessCb = DeviceEventEmitter.addListener('RNGoogleSignInSilentSuccess', (user) => { 
    this._user = user; 

    RNGoogleSignin.getAccessToken(user).then((token) => { 
     this._user.accessToken = token; 
     this._removeListeners(sucessCb, errorCb); 
     resolve(this._user); 
    }) 
    .catch(err => { 
     this._removeListeners(sucessCb, errorCb); 
     resolve(this._user); 
    }); 
    }); 

Il fatto è che solo noi avere fare utilizzare questo codice con saggezza. Ho usato il codice seguente per ottenere access_token e mi aiuta a risolvere il mio problema con il token di accesso. cambio sopra funzione come questa in GoogleSignin.android.js

currentUserAsync() { 
return new Promise((resolve, reject) => { 
    const sucessCb = DeviceEventEmitter.addListener('RNGoogleSignInSilentSuccess', (user) => { 
    this._user = user; 

    RNGoogleSignin.getAccessToken(user).then((token) => { 
     this._user.accessToken = token; 
     this._removeListeners(sucessCb, errorCb); 
     resolve(token); 
    }) 
    .catch(err => { 
     this._removeListeners(sucessCb, errorCb); 
     resolve(this._user); 
    }); 
    }); 

e io chiamo questa funzione come questo da index.android.js.

_signIn() { 
    GoogleSignin.signIn() 
     .then((user) => { 
      console.log('this1' + JSON.stringify(user)); 
      this.setState({user: user}); 
      var gettoken = GoogleSignin.currentUserAsync(user).then((token) => { 

       console.log('USER token', token); 
       this.setState({user: user}); 
      }).done(); 

     }).catch((err) => { 
      console.log('WRONG SIGNIN', err); 
     }) 
     .done(); 
} 

È possibile chiamarlo come una singola funzione in questo modo. in GoogleSignin.android.js

getAccessTok(user) 
{ 
    RNGoogleSignin.getAccessToken(user).then((token) => { 
     this._user.accessToken = token; 
     resolve(token); 
     }) 
     .catch(err => { 
      this._removeListeners(sucessCb, errorCb); 
      console.log('got error'); 
      resolve(this._user); 
     }); 
    } 

e da index.android.js chiamare questa funzione come questa

_getToken(){ 
    console.log(GoogleSignin.getAccessTok(this.state.user)); 
} 

solo quello che dovete fare è quello di superare l'utente corrente per ottenere l'accesso token. Spero che questo ti possa aiutare. Buona giornata. Grazie.

+0

Potete per favore fornire il codice sorgente completo – vishnumm93

Problemi correlati