Facebook登录按钮不再出现后登录然后注销
我的Facebook登录按钮已经被伟大的工作: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()当用户调用已连接
任何想法是怎么回事?在某人注销后,如何让Facebook登录按钮重新出现?
心灵调试:FB.logout()
发出一个AJAX请求,该方法在请求完成后立即返回,因此浏览器导航到您的网址/security_logout
,并在Facebook服务器有机会处理它之前删除AJAX连接。
我猜你需要看挂钩到注销响应,等待它完成,然后才转到/security_logout
,是这样的(未经测试,我只是用Google搜索的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>
谨慎添加解释吗?文字块不是教导任何人的好方法。 – slifty
看起来你可能是正确的,下一页(注销页面)不显示Facebook登录按钮。然而,之后的页面确实...我猜脸谱需要一点时间。奇怪的是,为什么我的FB.getLoginStatus显示用户在用户明显登录之前还未登录,登录按钮没有显示的原因。 –