使用Facebook Javascript API将用户注销并重新登录

时间:2013-10-17 15:59:21

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

我希望我网站上的用户点击一个按钮,将其记录在Facebook外,然后调出登录提示,以便他们再次登录。我正在使用Javascript SDK。

我尝试在回调中使用login()调用logout()。这基本上有效,但几乎所有现代浏览器都会阻止登录弹出窗口。由于logout()是异步的,因此不会使用click事件处理login()。

我也尝试过logout(),然后立即调用login(),但毫不奇怪,logout()没有及时生效。我在注销和登录之间尝试了一个大的for循环,试图阻止足够长的时间。这不起作用,即使有它也容易出错。

制作同步Facebook电话的所有建议都是“你做错了”但在这种特殊情况下,这种限制是由浏览器强加的,我无法自由更改。

有没有办法将用户注销,然后立即提示他们重新登录?我想在Javascript中处理这个问题,而不是重定向到注销或登录页面。

2 个答案:

答案 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到达你自己以外的服务器..