2016-06-28 137 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的更多信息 –