![](/img/trans.png)
[英]Question about Facebook API login-button (more about a feature of the login-button)
[英]Facebook login-button no longer appears after login then logout
我的Facebook登录按钮一直运行良好:
<fb:login-button length="long" background="light" perms="email"
size="medium" onlogin="myLoginCode()"></fb:login-button>
用户登录后,该Facebook登录按钮消失。 在我的注销按钮上,我有类似以下内容:
<a href="/security_logout" onclick="FB.logout();">logout</a>
当我单击此处时,我同时退出了Facebook身份验证机制和我自己的站点。 因此,我再次看到“使用Facebook登录”按钮。
问题突然出现,当您注销(并FB.logout()
时,我注意到Facebook登录没有再次出现! 那你有点卡住了。 发生了什么变化? 如果我从Firebug打电话给我:
FB.getLoginStatus(function(response) {
if (response.authResponse) alert(response.authResponse);
else alert("not logged in");
});
我会收到一条警告,说未登录。但是,如果我调用FB.login()
, FB.login()
得到以下信息:
当用户已经连接时调用FB.login()
知道发生了什么吗? 有人注销后,如何重新显示Facebook登录按钮?
心理调试: FB.logout()
发出AJAX请求,该方法在发出请求后立即返回,因此您的浏览器导航到您的url /security_logout
并在Facebook服务器有机会对其进行处理之前删除AJAX连接。
我想您需要查看挂接注销响应,等待它完成,然后再导航至/security_logout
,类似这样的内容(未经测试,我只是在FB.logout()
的API上进行了FB.logout()
搜索):
<a href="#" onclick="my_fb_logout()">logout</a>
。
function my_fb_logout() {
FB.logout(function (response) {
// turn https://www.mywebsite.com/current_path?query_string=xyz#section1
// into https://www.mywebsite.com
var url_string = window.location.href;
var base_url_len = url_string.length - window.location.pathname.length - window.location.search.length;
var base_url = url_string.substr(0, base_url_len);
// append /security_logout and redirect to your site's logout page
var new_url = base_url + "/security_logout";
window.location.href = new_url;
});
// this may not the best way to prevent bubbling of the event (navigating to # in the current page),
// but will do fine in this case I believe
return false;
}
您可以使用Javascript SDK http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/订阅auth.logout。当用户从facebook注销时,可以再次显示登录按钮。
<div id="fb-btn"><div class='fb-login-button' data-scope='email,user_checkins,offline_access,publish_stream,read_stream'>Facebook</div></div>
<div id='fb-root'></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId: '###########',
cookie: true,
xfbml: true,
oauth: true
});
FB.Event.subscribe('auth.login', function(response) {
window.location="http://###########";
});
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
document.getElementById('fb-btn').innerHTML = "<a href='http://###########' class='fb_button fb_button_medium'><span class='fb_button_text'>Facebook</span></a>";
}
});
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.