Я работаю над добавлением потока входа в Google в веб-приложение.Пытаясь выяснить, сможем ли мы реализовать эту функцию,
, если пользователь вошел в систему с несколькими учетными записями Google, покажите всплывающее окно с несколькими входами, где пользователь может выбрать учетную запись.
, если пользователь выполнил вход только в одну учетную запись 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());
});
}
}
Чтобы исправить это, я попытался
, когдавыход пользователя из приложения, выход из Google GoogleAuth.signOut();
когда пользователь нажимает кнопку входа в Google, сначала отмените доступ, затем всегда будет отображаться всплывающее окно входа GoogleAuth.disconnect();
использовать 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());
});
}
}
Все эти три исправления всегда открывают всплывающее окно, поэтому оно исправляет первый случай использования, но не удается во втором случае использования.
Я быочень ценю мысли о том, как добиться обоих вариантов использования.
Большое спасибо!