Показывать всплывающее окно с несколькими входами в систему при входе пользователя в несколько учетных записей Google и обходить всплывающее окно при входе пользователя только в один вход - PullRequest
0 голосов
/ 04 февраля 2019

Я работаю над добавлением потока входа в Google в веб-приложение.Пытаясь выяснить, сможем ли мы реализовать эту функцию,

  1. , если пользователь вошел в систему с несколькими учетными записями Google, покажите всплывающее окно с несколькими входами, где пользователь может выбрать учетную запись.

  2. , если пользователь выполнил вход только в одну учетную запись Google и ранее вошел в приложение, пропустите страницу входа и направьте его в приложение.

Я подумал auth2.signIn, он проверяет, сколько учетных записей присутствует, и на основании этого он достигает указанных выше вариантов использования.

В качестве дополнительного контекста, в настоящее время JavaScript для кода страницы входа в систему:

<script src="https://apis.google.com/js/platform.js?onload=init_google_signin" async defer></script>
<script>
function init_google_signin() {
        var auhtInstance,
            clientID = 'client_id';

        auhtInstance = gapi.load('auth2', function () {
          /**
           * Retrieve the singleton for the GoogleAuth library and set up the
           * client.
           */
          auth2 = gapi.auth2.init({
            client_id: clientID,
            scope: 'email profile'
          });
        });
      }
</script>

Далее обработчик щелчка кнопки входа в Google записывается как

function handleGoogleSignIn() {
    var GoogleAuth,
        currentUser,
        googleAuthPromise;

    GoogleAuth = gapi.auth2.getAuthInstance();
    currentUser = GoogleAuth.currentUser.get();

    if (currentUser && currentUser.isSignedIn()) {
       // submit form with access_token and user info, service will redirect user to logged-in page
       setGoogleFormValues(currentUser, currentUser.getBasicProfile());
    } else {
       googleAuthPromise = GoogleAuth.signIn();
       googleAuthPromise.then(function (user) {
          // submit form with access_token and user info, service will redirect user to logged-in page
          setGoogleFormValues(currentUser, currentUser.getBasicProfile());
       });
    }
} 

Чтобы исправить это, я попытался

  1. , когдавыход пользователя из приложения, выход из Google GoogleAuth.signOut();

  2. когда пользователь нажимает кнопку входа в Google, сначала отмените доступ, затем всегда будет отображаться всплывающее окно входа GoogleAuth.disconnect();

  3. использовать prompt: 'select_account' во время входа, поэтому ханdleGoogleSignIn будет выглядеть следующим образом:

     function handleGoogleSignIn() {
        var GoogleAuth,
            currentUser,
            googleAuthPromise;
    
        GoogleAuth = gapi.auth2.getAuthInstance();
        currentUser = GoogleAuth.currentUser.get();
    
        googleAuthPromise = GoogleAuth.signIn(prompt: 'select_account');
        googleAuthPromise.then(function (user) {
           // submit form with access_token and user info, service will redirect user to logged-in page
           setGoogleFormValues(currentUser, currentUser.getBasicProfile());
           });
        }
    } 
    

Все эти три исправления всегда открывают всплывающее окно, поэтому оно исправляет первый случай использования, но не удается во втором случае использования.

Я быочень ценю мысли о том, как добиться обоих вариантов использования.

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...