2016-06-28 39 views
6

Sto implementando Google per la prima volta come descritto in here e here.Come verificare se l'utente ha effettuato l'accesso o meno con "Google Accedi" (OAuth 2.0)

Sto usando HTML con Javascript.

Il problema che deve essere risolto è il seguente: Come posso, dopo l'accesso iniziale, su una pagina diversa (ad esempio una pagina di destinazione o portale che l'utente vede dopo l'accesso), verificare se l'utente è loggato ? C'è un servizio che posso chiamare per verificare l'accesso dell'utente in stato con la mia chiave app o qualcosa di simile? Suppongo che dovrei includere l'API di google su ogni pagina.

Accesso Code Page:

Script In Testa (codice dal tutorial di Google di cui sopra):

<head> 
.... 
<script src="https://apis.google.com/js/platform.js" async defer></script> 

<script> 
function onSignIn(googleUser) 
{ 
    var profile = googleUser.getBasicProfile(); 
    console.log('ID: ' + profile.getId()); 
    console.log('Name: ' + profile.getName()); 
    console.log('Image URL: ' + profile.getImageUrl()); 
    console.log('Email: ' + profile.getEmail()); 

    alert(profile.getName()); 
} 

function logout() 
{ 
    alert('logging out'); 
    var auth2 = gapi.auth2.getAuthInstance(); 
     auth2.signOut().then(function() { 
     console.log('User signed out.'); 
     }); 
} 
... 
</head> 

codice nel corpo (1 ° linea dal tutorial di Google di cui sopra, secondo la linea di innescare prova logout)

<body> 
... 
<div class="g-signin2" data-onsuccess="onSignIn"></div> 
<div onmousedown="logout()">Logout</div> 
... 
</body> 

C'è un modo per includere l'API di google su un'altra pagina e quindi chiamare qualche funzione di controllo dello stato di accesso? O un altro modo per dire concretamente se l'utente ha effettuato il login o l'uscita?

risposta

3

Puoi stringificare un oggetto userEntity personalizzato e memorizzarlo in sessionStorage dove puoi controllarlo ogni volta che carichi una nuova pagina. Non ho ancora testato il seguente ma dovrebbe funzionare (fare qualcosa di simile con i token WebAPI nello stesso modo)

function onSignIn(googleUser) 
 
{ 
 
    var profile = googleUser.getBasicProfile(); 
 
    console.log('ID: ' + profile.getId()); 
 
    console.log('Name: ' + profile.getName()); 
 
    console.log('Image URL: ' + profile.getImageUrl()); 
 
    console.log('Email: ' + profile.getEmail()); 
 
    
 
    var myUserEntity = {}; 
 
    myUserEntity.Id = profile.getId(); 
 
    myUserEntity.Name = profile.getName(); 
 
    
 
    //Store the entity object in sessionStorage where it will be accessible from all pages of your site. 
 
    sessionStorage.setItem('myUserEntity',JSON.stringify(myUserEntity)); 
 

 
    alert(profile.getName()); 
 
} 
 

 
function checkIfLoggedIn() 
 
{ 
 
    if(sessionStorage.getItem('myUserEntity') == null){ 
 
    //Redirect to login page, no user entity available in sessionStorage 
 
    window.location.href='Login.html'; 
 
    } else { 
 
    //User already logged in 
 
    var userEntity = {}; 
 
    userEntity = JSON.parse(sessionStorage.getItem('myUserEntity')); 
 
    ... 
 
    DoWhatever(); 
 
    } 
 
} 
 

 
function logout() 
 
{ 
 
    //Don't forget to clear sessionStorage when user logs out 
 
    sessionStorage.clear(); 
 
}

Naturalmente, è possibile avere alcune verifiche interne se l'oggetto sessionStorage viene manomesso con. Questo approccio dovrebbe funzionare con browser moderni come Chrome e Firefox.

+0

Grazie per la risposta, proverò e aggiornerò non appena avrò tempo. Puoi dirmi che la variabile 'sessionStorage' è una sorta di oggetto globale in javascript? o è qualcosa che dovresti impostare? ogni nuova pagina deve ancora chiamare la funzione php sessionstart per avere questa variabile accessibile in javascript? –

+0

Sicuro ... È disponibile in javascript e non è necessario fare riferimento a librerie di terze parti. È possibile ottenere ulteriori informazioni da W3Schools da http://www.w3schools.com/html/html5_webstorage.asp –

Problemi correlati