Facebook Connect禁用自动登录

时间:2011-01-19 07:18:11

标签: facebook facebook-graph-api

我集成了图形api facebook connect但是如果我们登录到facebook,我们将自动登录到facebook连接的网站。我们是否有任何方式让用户点击fb“登录”,然后用户才能通过他们的fb帐户连接到该网站?

现在,用户自动登录该网站,无需选择是否要使用自己的Facebook帐户。如果他们想要从网站注销,他们需要完全从Facebook注销,然后他们才可以从Facebook连接的网站注销。

任何人都可以帮助我或提供一些如何去做的提示? 谢谢!

4 个答案:

答案 0 :(得分:3)

我在最近的网站上遇到了同样的问题,并找到了克服它的方法。我的解决方案允许用户已经在他们的计算机上登录到facebook,但没有在我的网站上自动登录,然后他们可以使用Facebook登录按钮登录,最后当他们退出时,它们不会将他们从Facebook登录到他们的计算机上,就在我的网站上(就像Digg和facebook一样)。

要做到这一点,我使用https://github.com/facebook/php-sdk/在PHP中检查是否存在与用户和网站的活动facebook会话(这将导致自动登录)。如果有,我不会回应自动登录代码:

  FB.init({ 
      appId   : '<?php echo $facebook->getAppId(); ?>',
      session : <?php echo json_encode($session); ?>, // don't refetch the session when PHP already has it
      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.login', function() {
      window.location = "process-login.php";
    });

但只是渲染我自己的facebook登录按钮,链接到“process-login.php”。

process-login.php会设置自定义$ _SESSION变量,该变量告诉我的网站有人被记录(无论是通过我自己的系统,还是通过facebook),然后重新加载引用页面(使用$ _SERVER ['HTTP_REFERER'])由于我自己的$ _SESSION变量现已设置,现在将显示用户通过Facebook登录。要记录它们(没有完全将它们从Facebook中删除,只记录我的网站),我只需加载一个删除$ _SESSION变量的注销脚本。

example.php(在github上的php-sdk中)非常有助于找到我的解决方案,尽管我必须对其进行大量定制以使其适用于我现有的系统。它至少帮助我了解如何在PHP中访问facebook会话变量(在示例中存储在$ me中)。

希望这可以帮助你,如果它仍然是一个问题,或在这种情况下它帮助其他人。

编辑: 结果我在极少数情况下仍然遇到了一些自动登录问题。为了解决这个问题,我删除了event.subscribe('auth.login'),并在订阅auth.login之前创建了一个调用以下函数的facebook按钮来检查登录状态。这是功能:

  function check_login_session(){
        FB.getLoginStatus(function(r){
            if(r.session){
                window.location = '/process-login.php';
            }
            else{
                FB.Event.subscribe('auth.login', function(response) {
                    window.location = '/process-login.php';
                });
                FB.login();
            }
        });
    }`

答案 1 :(得分:1)

我遇到了同样的问题,我猜你正在使用facebook提供的脚本。在这种情况下,您有一个与window.fbAsyncInit事件关联的函数。每次加载页面时都会发生这种情况。 在这个方法的最后你有代码:

FB.getLoginStatus(function(response) { statusChangeCallback(response); });

函数statusChangeCallback验证用户的Facebook状态(已连接,已授权或未知)。在这里,如果用户“已连接”,则将其登录到您的站点。那就是问题所在,你总是试图用Facebook登录用户。

这必须仅在点击时发生,因此您应该删除这些行

答案 2 :(得分:0)

亲爱的,亲爱的,我觉得你的问题让你很困惑。你的问题并没有说明你想要什么。至于我已经理解,我认为你想通过facebook连接将用户连接到你的网站,你想要当用户点击facebook注销时,它会自动从你的网站注销。 如果我对你的问题的理解是正确的,那么只需让用户通过facebook登录并在FB.Event.Subscribe事件中登录你的系统。 使用以下代码登录按钮

<fb:login-button perms='email' autologoutlink='true'>

当用户允许您的Facebook帐户与您的网站连接时

<div id="fb-root">
 <script>
   window.fbAsyncInit = function() {
   FB.init({appId: "Your APP ID",
            status: true,
            cookie: true,
            xfbml: true});
    FB.getLoginStatus(function(response) {
      if (response.session) {
        // Send here parameters that logins to your system through your website login system

      } else {

    }
    });    
    FB.Event.subscribe("auth.login", function(response) {
    window.location.reload();
      });
FB.Event.subscribe("auth.logout", function(response) {
    window.location.reload();

    //Send the Parameters that logouts user from your website through your website logout system;
      });
       };
   (function() {
     var e = document.createElement("script");
     e.type = "text/javascript";
     e.src = document.location.protocol +
     "//connect.facebook.net/en_US/all.js";
     e.async = true;
     document.getElementById("fb-root").appendChild(e);
   }());


 

并将上述整个代码放在&lt; body&gt;之后标签

答案 3 :(得分:0)

如果你有:

FB.Event.subscribe('auth.login', function() {
   fbLogin(this);
});

尝试评论/ * fb.Event ..... * /