Facebook注销/断开FB.login()在用户已连接时调用

时间:2012-02-01 10:04:19

标签: php javascript facebook authorization logout

<html>
    <head>
      <title>My Facebook Login Page</title>
    </head>
    <body>
      <div id="fb-root"></div>
      <script>
        window.fbAsyncInit = function() {
          FB.init({
            appId      : 'appID',
            status     : true,
            cookie     : true,
            xfbml      : true,
            oauth      : true,
          });
        };
        (function(d){
           var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
           js = d.createElement('script'); js.id = id; js.async = true;
           js.src = "//connect.facebook.net/en_US/all.js";
           d.getElementsByTagName('head')[0].appendChild(js);
         }(document));
      </script>
      <div class="fb-login-button">Login with Facebook</div>

    </body>
</html>

每当我点击[使用Facebook登录]按钮时,我会在JS Console中看到此消息“FB.login()在用户已连接时调用。”

如何断开用户连接?

3 个答案:

答案 0 :(得分:12)

使用FB.getLoginStatus方法查找用户是否已登录。

如果他们已登录,请尝试隐藏“登录”按钮。因为登录按钮将始终可见,并且在用户已登录时不执行任何操作。

请参阅此link以获取FB.getLoginStatus

答案 1 :(得分:4)

Abirami给出了一个很好的答案,一个额外的项目。

  

如何断开用户连接?

使用类似于名为FB.logout()的FB.login()调用来断开用户连接。请参阅:http://developers.facebook.com/docs/reference/javascript/FB.logout/

答案 2 :(得分:-5)

这是没有人告诉任何人的解决方案,因为它突出了Facebook的错误,所以要为我准备好投票......

如果Javascript facebook按钮上的'autologoutlink'参数设置为true,任何用户尝试注销后都会调用FB.login()。

问题在于:

    <fb:login-button autologoutlink="true" width="200" max-rows="1"></fb:login-button>

(((autologoutlink = “真”)))

如果设置为true,则在用户注销(FB.login)后始终会调用登录按钮,并且已将window.location设置为其他页面,该页面将重定向回登录页面,FB.login将被处理像一个对象,就像一个app开发者。

在控制台上,您会看到FB.login()总是在用户注销后被调用,因为Javascript facebook登录按钮错误上有'autologoutlink'参数。

我现在担心投票给我的白痴大声笑......

是这是javascipt SDK异步all.js脚本

的错误

秘诀是加载javascript Facebook按钮而不使用autologoutlink =“true”参数,但之后使用php sdk加载注销按钮。

在php中放置一个javascript sdk登录按钮,然后发布一个php注销按钮来解决Facebook代码中的异步错误:

$user = $facebook->getUser();
$logoutUrl=null;
$login_page='replace this for logged in page redirect'; //http://domain.com/loggedin
$logout_page='replace this for logged out page redirect'; //http://domain.com/loggedout

If ($user){
  $logoutUrl = $facebook->getLogoutUrl(array(
  'next'=>$logout_page
  ));
  $fb_login='<a href="'.$logoutUrl.'">Logout</a>';
}else{
  $fb_login='<fb:login-button width="200" max-rows="1"></fb:login-button>';
}

使用javascript SDK和

FB.Event.subscribe('auth.login', function(response) {
  window.location='$login_page';
});

以及页面上的某个地方

echo $fb_login;

所以你使用Javascript登录和php注销重定向方法,它将修补我们不会使用的Javascript登录按钮autologoutlink =“true”参数的错误,你只需要一个注销按钮图像和css和FB每次在FB.logout()之后都不再调用.login()。

你可以看到如何缩短这一堆我确定但这是没有人想告诉你的修复。

现在我的无意义咆哮......

简而言之,如果他们在PHP SDK中运行一个完全不安全的会话,他们甚至无法使按钮工作,那么不要向他们寻求答案!。

你被迫使用Facebook定义的异步脚本,但它们只是单方面安全,任何人都可以欺骗域或劫持一个不安全的会话,其中所有付款都由欺骗域名处理,所有Facebook上的应用程序完全是完全可以破解,他们知道,他们只是没有找到一种方法来把你的BS除了异步这个词,而不是双向安全性。

尝试设计使用异步JAVASCRIPT挂钩的任何东西,然后使其安全,他们总是可以责怪你,因为他们无法提供一个按钮,表示用户使用今天的脚本和任何简单的术语连接或未连接技术

我现在在笑。

我想这就是我们在stackoverflow上的原因......

就我个人而言,我认为Facebook javascript和php SDk应该简单,不要强迫设计师在社交设计中学习自己疯狂的方法,而只是简单地提供一种方法,说明用户登录为是......或者没有用户事实并非如此......但Facebook似乎认为他们是adobe并且用kak来保证一切,让我们阅读一本关于他们个人设计哲学的四层楼书籍,只留下没有例子和代码的你必须是精神上的调试,只有在你完成构建你的应用程序两天后才会改变,因为他们无法交付,而是喜欢听起来他们知道他们正在做什么来涵盖如此多的修改删除所说的错误。

就像adobe一样,如果它有效,我们就不必在它的设计中做一个课程吗?

但是因为它很痛苦并浪费了数十亿小时的人力资源,所以我肯定在某些时候你会被迫支付资格,因为那意味着更多的钱吗?

我的意思是你必须以这样的方式通过Facebook传递所有款项,以便他们可以远程编辑您的会话,因为您的应用程序错误地使您的数据库错误地付款。

当您提供的内容是他们应该为您支付的费用时,您的付款与您的Facebook有什么关系,最终带来,保留并向他们提供更多用户。

与好莱坞相同,他们称盗版是互联网上的一部免费电影,而不是向你支付其产品的免费广告,而好莱坞则需要800亿小时的利息,禁止利息!

海盗行为是从别人那里赚钱而不是奴役而被起诉,或者为此付出代价。

记住这个讲座对你有用。

我说了很多哈哈......

当一切都清楚时,你会看到道路正在把我们带到哪里。