it-swarm.com.de

Wie erhalte ich das Zugriffstoken vom Google Sign-In Javascript SDK?

Ich habe eine einfache einseitige Javascript-Webanwendung, die "Google-Anmeldung für Websites" verwendet: https://developers.google.com/identity/sign-in/web/sign-in

Wie kann ich ein Zugriffstoken für den Benutzer erhalten? Ich brauche eine überprüfbare Bestätigung der Identität des Benutzers auf meinem Server. Ich möchte keinen Offline-Zugriff. Ich möchte nur wissen, dass wenn der Web-Client eine Ajax-Anforderung an meinen Server sendet, ich der Identität des angemeldeten Benutzers vertrauen kann.

18
stickfigure

Zu Überprüfungszwecken ist es besser, den id_token zu verwenden, der Teil der auth-Antwort ist und an jedem Punkt wie folgt abgerufen werden kann:

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

Die Google API-Clientbibliotheken bieten Funktionen zur Überprüfung des id_token und zur Angabe der zugehörigen Benutzerinformationen auf der Serverseite: https://developers.google.com/api-client-library/

44
Scarygami

Ich hoffe, es geht Ihnen gut ... __ Hier ist die Lösung, Sie können dies versuchen: Eigentlich gibt es keinen solchen Funktionsnamen getAccessToken (nur Android), der in GoogleSignin.Android.js wie hier geschrieben definiert wird https://github.com/devfd/react-native-google-signin ..__ Das Beste ist jedoch, dass sie die Lösung bereits in GoogleSignin.Android.js implementiert haben. Schauen Sie sich einfach den unten stehenden Code von GoogleSignin.Android.js an

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

Die Sache ist nur, dass wir diesen Code mit Bedacht verwenden. Ich benutze den folgenden Code, um access_token zu erhalten, und es hilft mir, mein Zugriffstokenproblem zu lösen. Ich ändere die oben genannte Funktion 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);
    });
  });

und ich nenne diese Funktion von 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();
}

Sie können es als eine einzelne Funktion aufrufen, die in GoogleSignin.Android.js so aussieht

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

und von index.Android.js rufen Sie diese Funktion einfach so auf

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

sie müssen lediglich den aktuellen Benutzer übergeben, um Zugriffstoken zu erhalten. Hoffen Sie, dass dies Ihnen helfen wird.Haben Sie einen großartigen Tag. Vielen Dank.

0
Pravin Ghorle