2013-05-13 6 views
6

Ich versuche gerade eine Seite zu erstellen, wo sich der Benutzer mit seinem Google + Konto einloggen kann. Das meiste funktioniert. Ich lasse sie Zugang zu meiner Website gewähren. Sie können sich anmelden und ich erhalte ihren Namen und ihre Benutzer-ID, und ich zeige Inhalte, die für ihr Google-Konto auf meiner Website spezifisch sind.Google Auth2.0 abmelden

Wenn sich jedoch jemand anderes anmelden möchte und ich versuche, mich von der Website abzumelden, merkt sich die Google-Anmeldung immer noch, dass sie sich gerade angemeldet hat und nach dem Abmelden sofort den Code erneut anmeldet. Wenn ich den SSID-Cookie von Google lösche, mache ich das nicht, also gehe ich davon aus, dass Google die Tatsache speichert, dass ich mich gerade mit x angemeldet habe.

Gibt es eine Möglichkeit, wenn ich mich auslogge Google nicht sofort einloggen mit dem gleichen Konto, sondern fragen Sie nach der E-Mail-Adresse und Passwort eines Google-Benutzers?

Ich fühle mich, als ob ich hier etwas Offensichtliches verpasse, aber ich kann nicht herausfinden, wie ich damit umgehen soll.

Code I zu Auth verwenden und erhalten Daten:

<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

Dies ist eine kritische Frage, und ich finde es absolut bizarr, dass Google dies nicht unterstützt. –

+0

Ist gapi.auth.signOut(); nicht das? Ich habe es auf der Google-Seite gesehen, während ich nach dem entsprechenden Ziel gesucht habe. –

Antwort

0

Wenn Sie den Auth-Anruf zu tätigen, setzt approvalprompt zu erzwingen. Dadurch wird der Zustimmungsdialog jedes Mal angezeigt. Es überschreibt die Standardeinstellung von "auto". Sie können mehr unter https://developers.google.com/+/web/signin/#sign-in_button_attributes erfahren.

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

+0

Dies behandelt weder die Frage, noch ist der Genehmigungsprompt eine Lösung für die Abmeldung. Dies ist nur bei bestimmten "Anmeldeszenarien" nützlich, z. B. wenn Sie die verwendeten Bereiche aktualisieren müssen oder wenn Sie das Aktualisierungs-Token des Benutzers verloren haben und die Erstellung eines neuen Bereichs erzwingen müssen. – BrettJ

+0

Die größere Frage einer Abmeldefunktion wird möglicherweise nicht behandelt - sie behandelt jedoch die explizit gestellte Frage, wie der Zustimmungsdialog aufgerufen wird. Ich stimme zu, dass dies keine Lösung für die Abmeldung ist. – Joanna

0

Nachdem der Benutzer Ihre Anwendung genehmigt, werden sie in jede Zeit zu Ihrer App im Grunde angemeldet, die sie auch in Google angemeldet ist, vor allem, wenn unmittelbarer Modus eingeschaltet ist.

Einige Websites haben einen Abmeldelink oder eine Schaltfläche, die eine Seite oder ein Dialogfeld anzeigen, die etwas wie "Sie sind bei Google und dieser Website mit dem Konto [email protected] angemeldet. Wenn Sie möchten Wechseln Sie zu Google.com und melden Sie sich bei Ihrer Google-Sitzung ab. "

Sie können den angemeldeten Status eines Benutzers auch mithilfe Ihrer eigenen Cookies verfolgen und sie während der entsprechenden Ereignisse in Ihrem Code festlegen und entfernen. Sie möchten alle Token, die Ihre App im Namen des Benutzers während eines Abmeldevorgangs erhalten hat, verwerfen. Wenn sich der Benutzer erneut anmeldet, muss er die Anwendung nicht erneut mit dem Popupfenster (oder Weiterleitungsfenster) autorisieren, aber Sie erhalten während des Rückrufs immer noch ein neues Zugriffstoken.