Пользователь, вошедший в систему Google, изменил слушателя

Когда пользователь попадает на страницу, загружается и инициируется аутентификация Google. Google Sign-in API предоставляет функцию прослушивания, которая срабатывает при изменении пользователя (GoogleAuth.currentUser.listen()). Ожидаемое поведение функции, которую я хочу реализовать, включает в себя наблюдение за пользователями, входящими в систему Gmail на других вкладках браузера.

const userChanged = user => {
  if (user) {
    console.log('CHANGED TO USER: ', user);
  }
};

const loadGoogleAuth = () => {
  window.gapi.load('auth2', () => {
    const gapiAuth = window.gapi.auth2;
    gapiAuth.init({
      client_id: '<YOUR-CLIENT-ID>.apps.googleusercontent.com',
      cookie_policy: 'none', //my hunch is this could be affecting listener capabilities?
      scope: 'profile email openid',
    });
    const authInstance = gapiAuth.getAuthInstance();
    const element = document.getElementById('googleSignIn');
    authInstance.attachClickHandler(
      element,
      {},
      googleUser => {
        console.log(`Signed in: ${googleUser.getBasicProfile().getName()}`);
      },
      error => {
        console.log('Sign-in error', error);
      }
    );
    authInstance.currentUser.listen(userChanged);
  });
};

const withLifeCycles = lifecycle({
  componentDidMount() {
    if (window.gapi) {
      loadGoogleAuth();
    }
  },
});

Это работает, но только для первого Gmail, в который входит пользователь, или Gmail, который уже вошел в систему до того, как пользователь попадет на страницу. Другими словами, если я войду в Gmail A, он обнаружит изменение пользователя, но не обнаружит Gmail B, если я выйду из Gmail A и затем войду в Gmail B. Однако впоследствии он будет обнаруживать повторные входы в систему для Gmail A, а не для каких-либо других адресов Gmail. Возможно ли, чтобы функция прослушивателя обнаруживала входы на любой адрес gmail или только для первого обнаруженного gmail?


person Michael Chiang    schedule 03.10.2018    source источник
comment
Хороший вопрос, именно то, что мне нужно! надеюсь, кто-нибудь даст исчерпывающий ответ.   -  person user2677034    schedule 02.01.2019


Ответы (1)


Вам также необходимо прослушивать зарегистрированные изменения. Таким образом вы обнаружите, что пользователь вышел из учетной записи A и вошел в B.

auth2.isSignedIn.listen(signinChanged)

см. https://developers.google.com/identity/sign-in/web/listeners

person JozefS    schedule 26.02.2021