Подтвердить что ты не робот

Gapi.auth.signOut(); не работает Я потерян

Ниже приведен код, который я использую для входа в Google. У меня есть элемент login.php с идентификатором авторизации. При щелчке он записывается в порядке.

У меня есть ссылка на выход в моем заголовочном файле. Когда я нажимаю logout, он вызывает gapi.auth.signOut();, тогда он разрушает сеанс и перенаправляет обратно в login.php

Это происходит, насколько я могу судить, но затем он просто регистрирует пользователя прямо на нашем сайте с помощью google. Это боль, поскольку некоторые из наших пользователей переключаются с google на facebook logins.

Заранее благодарим за помощь.

function handleClientLoad() {
    gapi.client.setApiKey(apiKey);
    window.setTimeout(checkAuth, 1);
}

function checkAuth() {
    gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true}, handleAuthResult);
}

function handleAuthResult(authResult) {
    var authorizeButton = document.getElementById('authorize-button');


    if (authResult && !authResult.error) {
        //authorizeButton.style.visibility = 'hidden';
        makeApiCall();
    } else {
        //authorizeButton.style.visibility = '';
        authorizeButton.onclick = handleAuthClick;
    }
}

function handleAuthClick(event) {
    gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: false}, handleAuthResult);
    return false;
}

function signOut() {
    gapi.auth.signOut();
}


function makeApiCall() {

    gapi.client.load('oauth2', 'v2', function() {
        var request = gapi.client.oauth2.userinfo.get();

        request.execute(function(logResponse) {

            var myJSON = {
                "myFirstName": logResponse.given_name,
                "myLastName": logResponse.family_name,
                "name": logResponse.name,
                "socialEmailAddress": logResponse.email
            };

            gapi.client.load('plus', 'v1', function() {

                var request = gapi.client.plus.people.get({
                    'userId': 'me'
                });
                request.execute(function(logResponse2) {
                    //alert(JSON.stringify(logResponse));
                    myJSON['profilePicture'] = logResponse2.image.url;
                    myJSON['socialId'] = logResponse2.id;
                    //alert(JSON.stringify(myJSON));
                    $.ajax({
                        type: "POST",
                        url: "includes/login-ajax.php",
                        data: "function=googleLogin&data=" + JSON.stringify(myJSON),
                        dataType: "html",
                        success: function(msg) {

                            if (msg == 1) {

                                //window.location = "settings.php";
                            }
                        }
                    });
                });
            });
        });
    });
}
4b9b3361

Ответ 1

Убедитесь, что вы установили политику cookie на значение, отличное от none, в коде кнопки входа. Например:

function handleAuthClick(event) {
  gapi.auth.authorize(
    {
      client_id: clientId, 
      scope: scopes, 
      immediate: false, 
      cookie_policy: 'single_host_origin'
    },
    handleAuthResult);
  return false;
}

Обратите внимание, что выйти не будет, если вы работаете с localhost.

Ответ 2

Странная проблема, но решила мою проблему, предоставив кнопку signin (скрытую), даже если пользователь аутентифицирован.

См. полный вопрос/ответ здесь fooobar.com/questions/412049/...

Ответ 3

Сегодня я столкнулся с той же проблемой. Я ищу решение для всего. Единственное надежное решение, которое сработало для меня, - это отменить, как описано здесь

Я хранил access_token в сеансе, который необходим во время отзыва

Ниже мой код вы можете найти полезным

      function logout() {
         var access_token = $('#<%=accessTok.ClientID %>').val();
         var provider = $('#<%=provider.ClientID %>').val();
    if (access_token && provider) {
        if (provider == 'GPLUS') {
            var revokeUrl = 'https://accounts.google.com/o/oauth2/revoke?token=' +
                access_token;

            // Perform an asynchronous GET request.
            $.ajax({
                type: 'GET',
                url: revokeUrl,
                async: false,
                contentType: "application/json",
                dataType: 'jsonp',
                success: function (nullResponse) {
                    // Do something now that user is disconnected
                    // The response is always undefined.
                },
                error: function (e) {
                    // Handle the error
                    // console.log(e);
                    // You could point users to manually disconnect if unsuccessful
                    // https://plus.google.com/apps
                }
            });
        }
        else if (provider == 'FB') {
            FB.getLoginStatus(function (response) {
                if (response.status === 'connected') {
                    FB.logout();
                }
            });
        }
    } else {

    }
}