0

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

我的问题场景 *用户使用 facebook 登录我的帐户 *用户注销我的网站 *我的网站在注销状态下打开 *在另一个选项卡中,当前 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>
4

1 回答 1

0

你所描述的是正常行为。JS SDK 正在发送旧用户的signed_request对象,该对象允许新用户访问她的帐户。由于这与您有关,请在您的应用页面上包含一个注销按钮,并让用户知道当她完成使用您的应用时单击该按钮很重要。注销按钮应该FB.logout像这样调用:

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

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

于 2012-07-31T21:41:04.573 回答