web-dev-qa-db-ja.com

Google Sign-In Javascript SDKからアクセストークンを取得する方法

「ウェブサイト用のGoogleサインイン」を使用するシンプルなシングルページjavascript webappがあります: https://developers.google.com/identity/sign-in/web/sign-in

ユーザーのアクセストークンを取得するにはどうすればよいですか?サーバー上のユーザーのIDの検証可能なアサーションが必要です。オフラインアクセスは必要ありません。 Webクライアントがサーバーにajaxリクエストを送信すると、ログインしているユーザーのIDを信頼できることを知りたいだけです。

21
stickfigure

確認のために、id_tokenこれは認証応答の一部であり、次のような任意の時点で取得できます。

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

Google APIクライアントライブラリは、id_tokenを検証し、サーバー側の関連ユーザー情報を提供する関数を提供します。 https://developers.google.com/api-client-library/

51
Scarygami

あなたがうまくやっているといいのですが。ここに解決策があります、あなたはこれを試すことができます:実際には、ここに書かれているように、GoogleSignin.Android.jsで定義するそのような関数名getAccessToken(Androidのみ)はありません https://github.com/devfd/react-native -google-signin 。しかし、最良の部分は、GoogleSignin.Android.jsで既にソリューションを実装していることです。 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);
    });
  });

問題は、このコードを賢く使用していることだけです。以下のコードを使用してaccess_tokenを取得しましたが、アクセストークンの問題を解決するのに役立ちます。 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);
    });
  });

そして、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();
}

このように見える個々の関数として呼び出すことができます。 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);
      });
  }

そしてindex.Android.jsからこの関数をこのように呼び出すだけです

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

あなたがしなければならないことは、アクセストークンを取得するために現在のユーザーを渡すことです。これがお役に立てば幸いです。素晴らしい一日を。ありがとう。

1
Pravin Ghorle