web-dev-qa-db-ja.com

gapi.auth.signOut();動かない私は迷子になっている

以下は私がグーグルでログインするために使用しているコードです。 login.phpにIDauthorize-buttonの要素があります。クリックすると、問題なくログインします。

ヘッダーファイルにログアウトリンクがあります。ログアウトをクリックすると、gapi.auth.signOut();が呼び出され、セッションが破棄され、login.phpにリダイレクトされます。

これは私が知る限り起こりますが、それからユーザーをグーグルで私たちのサイトに直接ログインさせます。一部のユーザーがグーグルからフェイスブックのログインに切り替えるので、これは苦痛です。

助けてくれてありがとう。

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";
                            }
                        }
                    });
                });
            });
        });
    });
}
15
jcopeland

サインインボタンコードで、cookie-policyをnone以外の値に設定していることを確認してください。例えば:

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

ローカルホストから実行している場合、サインアウトは機能しないことに注意してください。

28
class

奇妙な問題ですが、ユーザーが認証されている場合でもサインインボタン(非表示)をレンダリングすることで問題を解決しました。

ここで完全な質問/回答を参照してください https://stackoverflow.com/a/19356354/353985

1
redochka

今日も同じ問題に遭遇しました。私は全体の解決策を探しています。私のために働いた唯一の信頼できる解決策は、説明されているように取り消すことです ここ

取り消し中に必要なセッションに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 {

    }
}
1
Naga