5

Im implementazione dell'autorizzazione utilizzando questo e sto attualmente mostrando un'icona di caricamento in React quando un utente fa clic sul pulsante per accedere e mostra la finestra di selezione/login dell'account auth2.Come determinare se la finestra auth2.signIn() di google è stata chiusa dall'utente?

Tuttavia, se un utente chiude la finestra, non sembra esserci alcun evento attivato, ovvero la funzione signIn() che restituisce una promessa non risolve mai, avrei pensato che Google avrebbe restituito un errore per questa promessa se la finestra è chiusa . Di conseguenza non c'è modo per me di smettere di mostrare l'icona del caricatore e visualizzare nuovamente il menu di accesso.

Mi chiedevo se qualcuno avesse una soluzione per questo?

+0

Hi profonda .. ha u ottenere qualsiasi slolution per questo? – Warrior

risposta

1

Sebbene l'API fornisca un meccanismo per rilevare quando l'utente fa clic sul pulsante Nega, non esiste un modo incorporato per rilevare che l'utente ha chiuso bruscamente la finestra popup (o ha chiuso il proprio browser Web, spento il proprio computer, e così via). La condizione Deny viene fornita nel caso in cui si desideri ripetere l'utente con ambiti ridotti (ad esempio, si richiede "email" ma è necessario solo un profilo e l'utente può procedere senza fornire la propria email).

Se la risposta dal callback di accesso contiene l'errore, access_denied, indica l'utente ha cliccato il negare tasto:

function onSignInCallback(authResult) { 
    if (authResult['error'] && authResult['error'] == 'access_denied') { 
    // User explicitly denied this application's requested scopes 
    } 
} 

Si dovrebbe essere in grado di implementare di accesso senza rilevare se la finestra era chiuso; questo è dimostrato in virtualmente all of the Google+ sample apps. In breve, dovresti evitare di utilizzare uno spinner come preferisci e invece nascondere l'interfaccia utente autenticata fino a quando l'utente non ha eseguito l'accesso.

Non è consigliabile farlo, ma per implementare il rilevamento della chiusura a comparsa, si potrebbe fare qualcosa di simile a ignorare il window.open chiamata globale, allora detect in window.unload o polling se la finestra è stata chiusa senza l'autenticazione dell'utente:

var lastOpenedWindow = undefined; 
window.open = function (open) { 
    return function (url, name, features) { 
     // set name if missing here 
     name = name || "default_window_name"; 
     lastOpenedWindow = open.call(window, url, name, features); 
     return lastOpenedWindow; 
    }; 
}(window.open); 

var intervalHandle = undefined; 
function detectClose() { 
    intervalHandle = setInterval(function(){ 
    if (lastOpenedWindow && lastOpenedWindow.closed) { 
     // TODO: check user was !authenticated 
     console.log("Why did the window close without auth?"); 
     window.clearInterval(intervalHandle); 
    } 
    }, 500); 
} 

Nota che, come ho implementato esso, questo meccanismo non è affidabile e soggetto a condizioni di gara .

+4

Ciao grazie per la risposta, tuttavia, come mai Facebook fornisce questo? Ho entrambe le autorizzazioni su Facebook e Google come opzioni sulla mia pagina e il metodo signIn di Facebook risolve il problema se l'utente chiude la finestra popup. Per me questo sembra un po 'di svista da parte di Google.La cosa spinner è solo una cosa ux per indicare all'utente che è iniziata una procedura di accesso (nel caso in cui facciano effettivamente clic su un'altra finestra e perdano la traccia della finestra di accesso). – Deep

0

Provo a modificare il mio codice che chiama la finestra di Google OAuth 2.0.
Devi solo aggiungere un ulteriore metodo AJAX che copre ciò che è il risultato dell'errore di Google OAuth.

gapi.auth2.getAuthInstance().signIn() 

Change a questo,

gapi.auth2.getAuthInstance().signIn().then(function(response){ 
    //If Google OAuth 2 works fine 
    console.log(response); 
}, function(error){ 
    //If Google OAuth 2 occured error 
    console.log(error); 
    if(error.error === 'popup_closed_by_user'){ 
     alert('Oh Dude, Why you close authentication user window...!'); 
    } 
}); 

Questo è tutto ...

Per ulteriori dettagli su Google OAuth 2.0 informazioni, è possibile visitare questo link.
https://developers.google.com/api-client-library/javascript/samples/samples#authorizing-and-making-authorized-requests
codice di esempio su JavaScript:
https://github.com/google/google-api-javascript-client/blob/master/samples/authSample.html

Problemi correlati