2016-06-28 139 views
6

我按照herehere的描述首次執行Google登錄。如何檢查用戶是否使用「Google登錄」登錄(OAuth 2.0)

我在使用帶有JavaScript的HTML。

需要解決的問題如下:首次登錄後,如何在不同的頁面上(例如登錄頁面或用戶在登錄後看到的門戶網站)檢查用戶是否已登錄?我可以打電話來檢查用戶的登錄狀態,是否有我的應用程序密鑰或類似的服務? 我假設我必須在每個頁面上包含google API。

登錄頁面代碼:

腳本頭(代碼來自谷歌的教程上面列出):

<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> 

代碼在身體(從谷歌的教程一號線上面列出,2號線到觸發註銷測試)

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

有什麼方法可以在另一個頁面上包含google API,然後調用一些檢查登錄狀態函數嗎?或者另一種方式來具體說明用戶是否登錄或退出?

回答

3

您可以對自定義的userEntity對象進行串聯並將其存儲在sessionStorage中,您可以隨時在加載新頁面時檢查它。我沒有測試以下,但它應該工作(做同樣的方式用的WebAPI令牌類似的東西)

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(); 
 
}

當然,你可以有一些內部的檢查,如果sessionStorage的對象被篡改用。這種方法應該適用於Chrome和Firefox等現代瀏覽器。

+0

感謝您的答案 - 將嘗試它,並儘快更新,只要我得到一些時間。你能告訴我是'sessionStorage'變量在javascript中的某種全局對象嗎?或者它是你必須設置的東西?每個新頁面是否還需要調用php sessionstart函數才能讓這個變量在javascript中可訪問? –

+0

當然...這是在JavaScript中可用,你不需要引用任何第三方庫。您可以從http://www.w3schools.com/html/html5_webstorage.asp獲得W3School的更多信息 –