Как получить токен доступа из Google Javascript SDK для входа в систему Google?

У меня есть простой одностраничный javascript webapp, который использует "Вход в Google для веб-сайтов": https://developers.google.com/identity/sign-in/web/sign-in

Как я могу получить токен доступа для пользователя? Мне нужно поддающееся проверке утверждение идентификатора пользователя на моем сервере. Мне не нужен автономный доступ; Я просто хочу знать, что, когда веб-клиент отправляет на мой сервер ajax-запрос, я могу доверять идентификатору зарегистрированного пользователя.

Ответ 1

Для целей проверки было бы лучше использовать id_token, который является частью ответа auth, и может быть извлечен в любой момент, например:

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

Библиотеки клиентов API Google предлагают функции для проверки id_token и предоставляют вам информацию о пользователе на стороне сервера: https://developers.google.com/api-client-library/

Ответ 2

Надеюсь, у вас все хорошо. Вот решение, вы можете попробовать следующее: На самом деле нет такой функции, которую имя getAccessToken (Android Only) определяет в GoogleSignin.android.js, как написано здесь 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));
}

вам нужно только передать текущему пользователю доступ к токену доступа. Надеюсь, это поможет вам. Отличный день. Спасибо.