我希望我网站上的用户点击一个按钮,将其记录在Facebook外,然后调出登录提示,以便他们再次登录。我正在使用Javascript SDK。
我尝试在回调中使用login()调用logout()。这基本上有效,但几乎所有现代浏览器都会阻止登录弹出窗口。由于logout()是异步的,因此不会使用click事件处理login()。
我也尝试过logout(),然后立即调用login(),但毫不奇怪,logout()没有及时生效。我在注销和登录之间尝试了一个大的for循环,试图阻止足够长的时间。这不起作用,即使有它也容易出错。
制作同步Facebook电话的所有建议都是“你做错了”但在这种特殊情况下,这种限制是由浏览器强加的,我无法自由更改。
有没有办法将用户注销,然后立即提示他们重新登录?我想在Javascript中处理这个问题,而不是重定向到注销或登录页面。
答案 0 :(得分:0)
不确定这是否有用......但
步骤1:在你的facebook初始化代码中,为auth.authResponseChange注册一个事件监听器,当你检测到response.status ==='not_authorized'时,你将一些'global'js变量设置为一个标志
步骤2:在按钮的单击处理程序中,在注销调用之后...使用while循环等待,直到设置了'global'变量,然后调用FB.login
<script>
// Create a "global" flag which will be set when the user has logged out
FB_LOGGED_OUT_FLAG=0;
window.fbAsyncInit = function() {
FB.init({
appId : 'YOUR_APP_ID', // App ID
channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
FB.Event.subscribe('auth.authResponseChange', function(response) {
if (response.status === 'connected') { FB_LOGGED_OUT_FLAG=0
} else if (response.status === 'not_authorized') {FB_LOGGED_OUT_FLAG=0
} else { //SET YOUR GLOBAL FLAG
FB_LOGGED_OUT_FLAG =1;
}
});
};
var MY_SWITCH_USER_BUTTON_HANDLER = function(){
FB.logout();
while(!FB_USER_LOGGED_OUT_FLAG) {}
FB.login()
}
// Load the SDK asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
}
</script>
在while循环执行时,不确定这是否会锁定用户的计算机..我认为不会,它只会在您的页面的线程内执行
答案 1 :(得分:0)
如何使用jquery对facebook注销URL发出同步http get请求,而不是从SDK调用FB.login ..?
请参阅此处有关在jquery中进行同步get请求的信息... How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?
并尝试使用该方法进行同步启动:
https://www.facebook.com/logout.php?access_token=**ACCESS_TOKEN**&next=**REDIRECT**
(重定向可能无关紧要,因为您实际上并没有重定向用户...)
不确定你是否被允许进行jquery到达你自己以外的服务器..