2013-05-13 14 views
6

Obecnie próbuję utworzyć witrynę, w której użytkownik może zalogować się na swoje konto Google +. Większość z nich działa. Poproszę ich o przyznanie dostępu do mojej strony internetowej. Mogą się zalogować, otrzymuję ich nazwę i identyfikator użytkownika, a także wyświetlam treść związaną z ich kontem Google w mojej witrynie.Wylogowanie z Google Auth2.0

Kiedy jednak ktoś inny chce się zalogować, a ja próbuję się wylogować, dziennik google wciąż pamięta, że ​​się zalogował i po wylogowaniu natychmiast uruchamia kod, aby się ponownie zalogować. Jeśli usunę plik cookie SSID z google, nie zrobię tego, więc zakładam, że właśnie tam Google zapisuje fakt, że właśnie zalogowałem się z x.

Czy istnieje sposób, aby się wylogować, aby google nie logowało się natychmiast przy użyciu tego samego konta, a raczej poprosić o e-mail i hasło użytkownika google?

Czuję, że brakuje tu czegoś oczywistego, ale nie mogę wymyślić, jak sobie z tym poradzić.

Kod używam do Auth i uzyskać dane:

<button class ="btn btn-primary" id="authorize-button" style="visibility: hidden">Log in</button> 

<script> 

    var clientId = ''; 

    var apiKey = ''; 

    var scopes = ''; 


    function handleClientLoad() { 

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

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


    function handleAuthResult(authResult) { 
    //alert("authorized"); 


    //alert(authResult.access_token); 
    var authorizeButton = document.getElementById('authorize-button'); 
    if (authResult && !authResult.error) { 
     authorizeButton.style.visibility = 'hidden'; 
     makeApiCall(); 
    } else { 
     authorizeButton.style.visibility = ''; 
     authorizeButton.onclick = handleAuthClick; 
    } 
    var token = document.createElement('h4'); 
    token.appendChild(document.createTextNode(authResult.access_token)); 
    document.getElementById('content').appendChild(token); 



    } 

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

    var x; 
    function makeApiCall() { 

    //return; 
    gapi.client.load('plus', 'v1', function() { 
     var request = gapi.client.plus.people.get({ 
     'userId': 'me' 
     }); 
     request.execute(function(resp) { 
     x = resp.id; 
     var heading2 = document.createElement('h4'); 
     var heading3 = document.createElement('h4'); 
     heading3.appendChild(document.createTextNode(resp.displayName)); 
     heading2.appendChild(document.createTextNode(resp.id)); 

     document.getElementById('content2').appendChild(heading2); 
     document.getElementById('content3').appendChild(heading3); 


     $.post("token.php", {id: x}); 
     }); 

    }); 

    } 
+0

To jest krytyczne pytanie i uważam za absolutnie dziwne, że Google nie obsługuje tego. –

+0

Is gapi.auth.signOut(); nie to? Widziałem to na stronie Google, szukając równoważnika celu. –

Odpowiedz

0

Po dokonaniu połączenia auth ustaw approvalprompt zmusić. Spowoduje to wyświetlenie okna dialogowego zgody za każdym razem. Zastępuje ustawienie domyślne "auto". Możesz dowiedzieć się więcej na stronie https://developers.google.com/+/web/signin/#sign-in_button_attributes.

gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true, approvalprompt: force}

+0

To nie rozwiązuje problemu, ani też metoda approvalprompt nie wymusza rozwiązania problemu z wylogowaniem. Jest to użyteczne tylko podczas niektórych scenariuszy "logowania", na przykład wtedy, gdy musisz odświeżyć zakresy, których używasz lub jeśli zgubiłeś token odświeżania użytkownika i musisz wymusić generowanie nowego. – BrettJ

+0

Może nie dotyczyć większej kwestii funkcji wylogowania - ale odnosi się do jawnie zadawanego pytania, w jaki sposób wyświetlić okno dialogowe zgody. Zgadzam się, że nie jest to rozwiązanie do wylogowania. – Joanna

0

Po użytkownik upoważnia swoją aplikację, są one po prostu zalogować się do aplikacji za każdym razem, są również rejestrowane w Google, zwłaszcza, gdy w trybie natychmiastowym jest włączony.

Co niektóre witryny mają link lub przycisk wylogowania, który wyświetla stronę lub okno dialogowe, które mówi coś w stylu "Jesteś zalogowany w Google i na tej stronie z kontem [email protected]" aby przełączyć konta, wejdź na google.com i wyloguj się z sesji Google. "

Możesz także śledzić status zalogowanego użytkownika przy użyciu własnych plików cookie oraz ustawiać i usuwać je podczas odpowiednich zdarzeń w kodzie. Chcesz odrzucić wszystkie tokeny, które Twoja aplikacja uzyskała w imieniu użytkownika podczas zdarzenia wylogowania. Gdy użytkownik zaloguje się ponownie, nie będzie musiał ponownie autoryzować aplikacji za pomocą wyskakującego okienka (lub okna przekierowania), ale mimo to otrzymasz nowy token dostępu podczas wywołania zwrotnego.