Ответ 1
Вы встречаете два вызова "console.log(resp)"; в вашей функции "googleCallback", потому что:
Вызывается функция, которую вы определяете для вашего обратного вызова входа в систему каждый раз, когда пользователь вносит изменения в статус
Эта цитата взята из веб-страницы "Мониторинг состояния пользователя" .
Как вы можете видеть в статье, объект результата авторизации имеет три разных значения "метод":
- NULL
- ПОДСКАЖИТЕ
- AUTO
Таким образом, ваш код обратного вызова запускается при появлении приглашения для входа ( "PROMPT" ) и при появлении баннера "Добро пожаловать назад" ( "АВТО" ).
Чтобы ваш код обратного вызова не работал с каждым событием триггера, вы можете изменить свой код следующим образом:
function signinCallback(authResult) {
if (authResult['status']['signed_in']) {
// Update the app to reflect a signed in user
// Hide the sign-in button now that the user is authorized, for example:
// document.getElementById('signinButton').setAttribute('style', 'display: none');
if (authResult['status']['method'] == 'PROMPT') {
console.log(authResult['status']['method']);
gapi.client.load('oauth2', 'v2', function () {
gapi.client.oauth2.userinfo.get().execute(function (resp) {
console.log(resp);
})
});
}
} else {
// Update the app to reflect a signed out user
// Possible error values:
// "user_signed_out" - User is signed-out
// "access_denied" - User denied access to your app
// "immediate_failed" - Could not automatically log-in the user
console.log('Sign-in state: ' + authResult['error']);
}
}
Этот код вызовет только функцию gapi.client.oauth2.userinfo.get(), если пользователь выполнил вход в систему, а событие, вызвавшее обратный вызов, имеет тип "PROMPT".