Как отключить gapi- auth2.attachClickHandler на condtion - PullRequest
3 голосов
/ 21 июня 2020

Я использую Google Auth для клиента (gapi) в своем коде, и у меня есть это событие onLoad:

<script>
    function onLoad() {
        gapi.load('auth2', function () {
            auth2 = gapi.auth2.init();
            var additionalParams = {};
            auth2.attachClickHandler('signinButton', additionalParams, onSignIn, onSignInFailure);
            //auth2.attachClickHandler('btnGoRegister', additionalParams, onRegisterIn, onSignInFailure);
        });
    }
</script>

Как вы можете видеть выше, я прикрепляю обработчик кликов для моей кнопки входа, который работает отлично. Другая часть заключается в том, что для кнопки «Регистрация» я должен включить / отключить кнопку и связанные с ней события при условии, которое отлично работает для другой аутентификации (например, FB).

Проблема здесь в том, что однажды attachClickHandler вызывается, то я не могу отключить его, так что если мое условие не истинно, то всплывающий экран Google не должен запускаться (в настоящее время, если он вызывается один раз, он всегда будет отображаться независимо от моего состояния).

Кто-нибудь знает, как этого добиться?

Спасибо

1 Ответ

2 голосов
/ 23 июня 2020

Похоже, что Google Sign-In API не поддерживает метод отключения обработчика кликов. С другой стороны, у них есть функция disconnect () & signOut () , но я не думаю, что она дает то, что вы хотите.

Одно из решений - добавьте дополнительную кнопку, которая обрабатывает решение о загрузке Google Auth API и выполняет предварительный щелчок по кнопке входа. SigninButton можно скрыть с помощью css.

У меня нет запущенного API, но код должен выглядеть примерно так:

const GoogleSignInButton = 'signinButton';
const GoogleDecisionGateSignInButton = 'googleDecisionGateButton';

function onLoad() {
    document.getElementById(GoogleDecisionGateSignInButton).addEventListener("click", GoogleDecisionGateButton);
}

function GoogleDecisionGateButton() {
    if (ShouldUseGoogleSigninButton()) {
        LoadGoogleAuthApi();
        ClickGoogleAuthButton();
    }
}

function ShouldUseGoogleSigninButton() {
    return true; // Replace this with logic to decided if user should use Google API Auth button or not.
}

function LoadGoogleAuthApi() {
    gapi.load('auth2', function () {
        auth2 = gapi.auth2.init();
        var additionalParams = {};
        auth2.attachClickHandler(GoogleSignInButton, additionalParams, onSignIn, onSignInFailure);
        //auth2.attachClickHandler('btnGoRegister', additionalParams, onRegisterIn, onSignInFailure);
    });
}

function ClickGoogleAuthButton() {
    document.getElementById(GoogleSignInButton).click()
} 

HTML:

<button id="signinButton" type="button"></button>
<button id="googleDecisionGateButton" type="button"></button>

CSS:

#signinButton { display: none !important }
...