【问题标题】:Facebook API Logout of my app but not facebookFacebook API 注销我的应用程序但不是 facebook
【发布时间】:2012-02-29 15:44:36
【问题描述】:

如何使用 Facebook 的 api 注销我的应用程序(网站),但让我保持登录到 facebook.com?

这让我正常登录:

 window.fbAsyncInit = function()
{
        FB.init({
            appId      : '<?= APP_ID ?>',
            status     : true, 
            cookie     : true,
            xfbml      : true,
            oauth      : true,
        });

    FB.Event.subscribe('auth.login', function(response)
    {alert(response);
            window.location = 'http://reviewsie.com/accounts/facebook';
        });

    };

  (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));

但是然后我在我的网站上单击注销,我终止了我与我的应用程序的会话。然后,当您再次单击 fb:login-button 时,它只是打开和关闭并且不执行任何操作,因为我仍然连接到 facebook。我希望它重定向。

但是,如果我在注销时也使用 Facebook::logoutUrl,它会将我从我的应用程序和 Facebook 中注销,这不是我想要的。

【问题讨论】:

  • 请粘贴您的代码。你试过什么?
  • 发布了我的代码,是的,我被困住了
  • 未设置($_SESSION['fb_APPID_user_id']);

标签: php javascript facebook facebook-login


【解决方案1】:

有点晚了,但可能会对某人有所帮助。您可以撤消应用程序权限,从而有效地将它们从您的应用程序中注销。代码如下:

FB.api('/me/permissions', 'delete', function(response) {
    console.log(response.status); // true for successful logout.
});

【讨论】:

    【解决方案2】:

    这对我有用:

    window.fbAsyncInit = function() {
    
    FB.getLoginStatus(function(response) {
    
        FB.api("/me/permissions", "delete", function(response){ 
    
    
        });
    
    });
    
    }
    

    【讨论】:

      【解决方案3】:

      如果您使用 fb 登录,您确定要仅注销您的应用程序,而不是 fb 吗?什么样的应用程序可能想做这样的事情?为什么?这样做有什么好处?


      但如果你真的想(破解),在 index.php 中:

      <?php
      require 'init.php';    // general init
      require 'init_fb.php'; // sets $fb_id if logged in to fb
      
      if (isset($fb_id) and !isset($_SESSION['do_not_auto_login'])) {
          echo "<a href='/logout'>Logout</button>";
          include 'app.php';
          return;
      }
      
      if (isset($_SESSION['do_not_auto_login'])
           echo "<a href='/re_login'>FB Login</button>";
      else include 'html_and_js_fb_login_code_and_button.php';
      
      include 'startpage.php';
      ?>
      

      在logout.php中:

      $_SESSION['do_not_auto_login'] = true;
      // destroy-code
      

      并在 re_login.php 中:

      unset($_SESSION['do_not_auto_login']);
      header("location: /"); // re-direct back to index.php
      

      不完美,但效果不错。希望你能得到破解!


      但是,为什么?如果您认为您的用户不想回来,请询问“如何从用户中删除我的 fb-app?”或其他什么,或尝试@DMCS 的答案.. 为什么?

      【讨论】:

        【解决方案4】:

        Facebook 需要使用destroySession 来做

        www.example.com?act=logout

        <?php
        php sdk blah blah
        
        
        if($_GET['act'] =='logout'){
            $facebook->destroySession(); 
        
        }
        $params = array(
         'scope' => 'read_stream, friends_likes',
         'redirect_uri' => 'https://www.myapp.com/post_login_page'
        );
        
        $loginUrl = $facebook->getLoginUrl($params);
        
        ?>
        

        也许您需要设置参数以使其重定向。

        【讨论】:

        • 当您从您的网站注销时,您无法注销 Facebook。当您单击登录时,您希望它重定向到特定页面吗?这是你想要的吗?
        • 如果你想从你的网站注销。只需使用 $facebook->destroySession(); , 不要使用 getLogoutURL。
        • 像这样添加参数,正确的应该重定向^^ 'redirect_uri' => 'myapp.com/post_login_page'
        • 我认为这是正确的答案。您不想完全撤销权限并强制重新授权对话框。从服务器销毁 FB 会话允许您终止应用程序具有的任何 FB 连接,而无需将用户完全退出 FB。有时,用户希望通过将他们从 FB 中注销来让他们安心地注销给定的应用程序,而不会惹恼他们。不错的简单解决方案。感谢发帖。
        【解决方案5】:

        当用户登录到您的应用时,使用他们当前的访问令牌向/me/permissions 发送 HTTP DELETE 调用。这会将他们从您的应用程序中注销,如果他们想玩更多游戏,则要求他们重新进行身份验证。还要确保使用普通的 php 会话清除代码来销毁 php 会话。

        【讨论】:

        • 我认为他不想删除权限!!只是普通的注销!! @DMCS
        • “我如何使用 Facebook 的 api 注销我的应用程序(网站),但让我登录到 facebook.com?”这是他们的问题,对吧?强制重新授权的唯一方法是删除当前的身份验证令牌(至少 2012 年 2 月是这样的......也许 Facebook 已经改变了一些东西)。请告知我们您将如何回答他们的问题。
        • @LeonardPauli 很好地解决了这个问题,我很惊讶这个似乎与许多人的网站非常相关的问题却引起了如此少的关注。我不会在 PHP(对我来说是 C#)中做任何事情,所以学习新东西总是很有趣。
        猜你喜欢
        • 2015-01-31
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 2011-08-07
        • 2013-03-14
        • 2012-04-04
        • 1970-01-01
        相关资源
        最近更新 更多