2013-05-13 11 views
6

Attualmente sto cercando di creare un sito in cui l'utente possa accedere con il proprio account Google +. La maggior parte funziona. Li ottengo per concedere l'accesso al mio sito web. Possono accedere e ottengo il loro nome e ID utente e mostro i contenuti specifici del loro account Google sul mio sito.Logout Google Auth2.0

Quando qualcun altro vuole connettersi e io provo a "disconnettersi" dal sito, il log di google ricorda ancora che ha appena effettuato l'accesso e dopo averlo disconnesso esegue immediatamente il codice per accedere nuovamente. Se cancello il cookie SSID da google, non lo fa, quindi presumo che sia dove Google archivia il fatto che ho appena effettuato l'accesso con x.

C'è un modo per quando eseguo il logout, fare in modo che Google non acceda immediatamente con lo stesso account, ma piuttosto chiedi l'e-mail e la password di un utente google?

Mi sento come se mi mancasse qualcosa di ovvio qui, ma non riesco a capire come affrontare questo.

codice che uso per Auth e ottenere i dati:

<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

Questa è una domanda critica e trovo assolutamente bizzarro che Google non supporti questo. –

+0

is gapi.auth.signOut(); no? L'ho visto sulla pagina di Google mentre cercavo l'equivalente dell'obiettivo c. –

risposta

0

Quando si effettua la chiamata autenticazione, impostare approvalprompt alla forza. Ciò costringerà la finestra di dialogo del consenso a comparire ogni volta. Sostituisce l'impostazione predefinita di "auto". Puoi saperne di più allo https://developers.google.com/+/web/signin/#sign-in_button_attributes.

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

+0

Questo non risolve la domanda, né l'approvazioneprompt forza una soluzione per la disconnessione. È utile solo durante alcuni scenari di "accesso", come quando è necessario aggiornare gli ambiti che si stanno utilizzando o se si è perso il token di aggiornamento dell'utente e si deve forzare la generazione di uno nuovo. – BrettJ

+0

Potrebbe non rispondere alla più ampia domanda relativa a una funzionalità di disconnessione, ma risponde alla domanda esplicita su come richiamare la finestra di dialogo del consenso. Sono d'accordo che questa non è una soluzione per l'uscita. – Joanna

0

Dopo che l'utente autorizza la vostra applicazione, sono fondamentalmente collegati per la vostra applicazione ogni volta che essi sono registrati anche a Google, in particolare quando la modalità immediata è acceso.

Ciò che alcuni siti fanno è un collegamento o un pulsante di disconnessione che visualizza una pagina o una finestra di dialogo che dice qualcosa sulla falsariga di "Sei connesso a Google e questo sito con account [email protected] per cambiare account, andare su google.com e uscire dalla sessione di Google. "

È inoltre possibile tenere traccia dello stato di accesso di un utente utilizzando i propri cookie e impostandoli e rimuovendoli durante gli eventi appropriati nel codice. Vorresti scartare qualsiasi token che la tua app ha ottenuto per conto dell'utente durante un evento di disconnessione. Quando l'utente ha effettuato nuovamente l'accesso, non è necessario re-autorizzare l'applicazione con il popup (o la finestra di reindirizzamento), ma si otterrà comunque un nuovo token di accesso durante la richiamata.