FB.getLoginStatus()需要刷新页面

时间:2012-07-31 19:55:10

标签: facebook facebook-javascript-sdk facebook-login

我使用FB.getLoginStatus()和FB.Login()使用facebook将用户登录到我的网站。我首先使用FB.getLoginStatus()检查页面加载的状态,并将状态保存在隐藏变量中。当用户点击我的facebook登录按钮时,我首先检查隐藏变量中的值,并仅在FB.getLoginStatus()未连接时调用FB.Login()。如果FB.getLoginStatus()返回'Connected',那么我只是将用户登录到我的网站而没有FB.Login()。

我的方案有问题 *用户使用Facebook登录我的accont *用户退出我的网站 *我的网站在注销状态下打开 *在另一个标签中,当前的Facebook用户退出Facebook,新用户登录到Facebook *用户回到我的网站并点击Facebook登录按钮而不刷新页面 *旧的Facebook用户(不是当前登录到Facebook的用户)登录到我的帐户

当用户点击Facebook登录按钮时,如何识别Facebook中的最新用户?

<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<div id="fb-root">
</div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
// initialize the library with your Facebook API key    

var AppID = '<%=AppID%>';

window.fbAsyncInit = function() {
FB.init({
appId: AppID,
status: true,
cookie: true,
xfbml: true,
channelUrl: 'http://<%=Request.ServerVariables("HTTP_HOST")%>/channel.html'
});

FB.Event.subscribe('auth.login', function(response) {
//alert('logged in');
});

FB.Event.subscribe('auth.logout', function(response) {
//alert('logged out');
});

FB.getLoginStatus(function(response) {
if (response.status === "connected") {
var uid = response.authResponse.userID;
document.getElementById('hdnFBConnected').value = uid;
}
else if (response.status === "not_authorized") {
//alert("Not authorized");
document.getElementById('hdnFBConnected').value = '';
}
else {
//alert("user not logged in to facebook");
document.getElementById('hdnFBConnected').value = '';
}
});
}; 
</script>

<a href="#" onclick="WindowOpen()"><img src="<%=global_language & "/images/FacebookSmall.gif"%>" /></a>

<script type="text/javascript" language="javascript">
function WindowOpen() {

if (document.getElementById('hdnFBConnected').value != '') //user is connected
{
FB.api('/me', { fields: 'first_name, last_name, locale, email' }, function(result) {

var uid = document.getElementById('hdnFBConnected').value;    

//log the user into my site
})
}
else { //user is not connected, so calling FB.Login()
FB.login(function(response) {
if (response.authResponse) {
var access_token = response.authResponse.accessToken;

FB.api('/me', { fields: 'first_name, last_name, locale, email' }, function(result) {

var uid = response.authResponse.userID;    

var globalLang = '<%=global_language%>';
//log the user into my site                            })
}
else {
//alert('User cancelled login or did not fully authorize.');
}
}, { scope: 'email' }
); 
}

}
</script> 

</body>

1 个答案:

答案 0 :(得分:0)

您所描述的是正常行为。 JS SDK正在发送旧用户的 signed_request 对象,该对象允许新用户访问她的帐户。由于这会让您感到担忧,请在应用页面上添加注销按钮,让用户知道在使用您的应用时,点击该按钮非常重要。注销按钮应该像这样调用FB.logout

FB.logout(function(response) {
  // user is now logged out
});

为了提高安全性,您可以创建一个活动计时器,提示用户在X分钟不活动后单击按钮。如果用户没有点击,例如1分钟,则她会自动注销。这就是大多数银行网站处理会话安全的方式。

相关问题