【问题标题】:facebook logout only doing logout from website not from the facebook?facebook注销只从网站注销而不是从facebook注销?
【发布时间】:2014-02-21 05:10:48
【问题描述】:

我正在从网站登录和注销 Facebook。因此,如果用户想要登录该站点,他将单击 facebook 登录,当他单击注销时,他将自动从 facebook 和该站点注销。所以我已经把我的代码变成了这样 在 index.html 我的代码是这样的

<div id="fb-root"></div>
<script type="text/javascript">
//<![CDATA[
window.fbAsyncInit = function() {
   FB.init({
     appId      : 'XXXXXXXXXXXXX', // App ID
     channelURL : '', // Channel File, not required so leave empty
     status     : true, // check login status
     cookie     : true, // enable cookies to allow the server to access the session
     oauth      : true, // enable OAuth 2.0
     xfbml      : false  // parse XFBML
   });
};
// logs the user in the application and facebook
function login(){
FB.getLoginStatus(function(r){
     if(r.status === 'connected'){
            window.location.href = 'fbconnect.php';
     }else{
        FB.login(function(response) {
                if(response.authResponse) {
              //if (response.perms)
                    window.location.href = 'fbconnect.php';
            } else {
              // user is not logged in
            }
     },{scope:'email'}); // which data to access from user profile
 }
});
}

// Load the SDK Asynchronously
(function() {
   var e = document.createElement('script'); e.async = true;
   e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';                
   document.getElementById('fb-root').appendChild(e);
}());

//]]>
</script>
<a href='#' onclick='login();'>Facebook Login</a>

在 fbconnect.php 我的代码是这样的

<?php
    require 'src/facebook.php';
    $facebook = new Facebook(array(
           'appId'  => 'XXXXXXXXXXXXXXXXX',
           'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
           'cookie' => true,
    ));
    $user = $facebook->getUser();
    $loginUrl = $facebook->getLoginUrl();
    //echo "<a href='$loginUrl'>login</a>";

    $logoutUrl = $facebook->getLogoutUrl();
    //echo $loginUrl; 
    if($user){
        $_SESSION['user_info'] = $user; 
        $_SESSION['user_pro']= $facebook->api('/me');
        echo $_SESSION['user_pro']['first_name'];
        echo $_SESSION['user_pro']['last_name'];
        echo '<pre>';
        //print_r($_SESSION);
        echo '</pre>';
    }
    else{
        echo 'not logged in '; 
    }
    echo "<a href='logout.php'>log out </a>"
?>

在 logout.php 中我的代码如下所示

<?php
require 'src/facebook.php';    //including the facebook php sdk
$facebook = new Facebook();
$token = $facebook->getAccessToken();
$url = 'index.html';
$facebook->destroySession();
session_destroy();
header('Location: '.$url);
?>

所有这些都是在注销网站,但不是从 Facebook 注销。那么有人可以告诉我如何同时从facebook和网站注销吗?任何帮助和建议都会非常感激。谢谢

【问题讨论】:

    标签: php facebook facebook-php-sdk facebook-login


    【解决方案1】:

    不要使用任何重定向&lt;a href='logout.php'&gt;log out &lt;/a&gt;

    只需要操作 facebook 会话销毁

    if(isset($_GET['action']) && $_GET['action'] === 'logout'){
            $facebook->destroySession();
        }
    

    然后你就可以使用你的站点会话销毁 欲了解更多信息:- PHP SDK - Facebook Logout

    【讨论】:

    • Nope..this one is no working ..我尝试了logout.php中的代码&lt;?php require 'src/facebook.php'; //including the facebook php sdk $facebook = new Facebook(); $token = $facebook-&gt;getAccessToken(); $url = 'index.html'; if(isset($_GET['action']) &amp;&amp; $_GET['action'] === 'logout'){ $facebook-&gt;destroySession(); } header('Location: '.$url); ?&gt;
    • 请尝试在同一个文件上使用,不要对其他文件包含或重定向
    【解决方案2】:

    是的,这不会从 Facebook 注销。

    我看到您也在使用 JS SDK,因此您需要使用 JS API 进行注销。你可以这样做

    echo '<a href="#" onclick = "fb_logout();" >Logout </a>';
    

    你需要添加以下JS函数,我看到你已经有FB.login

    <script>
                function fb_logout(){
                        if (FB.getAuthResponse()) {
                            FB.logout(function(){
                                top.location.href = 'logout.php'
                            });
                        }else{  
                            top.location.href = 'logout.php'
                        }
                }
    </script>
    

    确保你在 fbconnect.php 文件中有以下 JS 以便触发 FB 函数 所以完整的代码是

    <div id="fb-root"></div>
    
    <script type="text/javascript">
    
      window.fbAsyncInit = function() {
        FB.init({appId: '<?php echo FACEBOOK_APP_ID ; ?>', status: true, cookie: true, oauth: true,
                 xfbml: true});
      };
      (function() {
        var e = document.createElement('script'); e.async = true;
        e.src = document.location.protocol +
          '//connect.facebook.net/en_US/all.js';
        document.getElementById('fb-root').appendChild(e);
      }());
    
    function fb_logout(){
                            if (FB.getAuthResponse()) {
                                FB.logout(function(){
                                    top.location.href = 'logout.php'
                                });
                            }else{  
                                top.location.href = 'logout.php'
                            }
                    }
    </script>
    

    在文件logout.php 中,您可以处理您网站的注销代码。

    还用于使用 PHP SDK 生成注销,您需要这样做

    $params = array( 'next' => 'page after logout' );
    
    $logouturl = $facebook->getLogoutUrl($params); // $params is optional.
    
    <a href="<?php echo $logouturl; ?>"> Logout </a>
    

    我建议使用 JS SDK 进行注销,它确实可以正常工作,并且也可以从 Facebook 注销。

    【讨论】:

    • 我试过你的代码。但在浏览器控制台面板中,我收到类似Uncaught ReferenceError: FB is not defined 的错误
    • hmm 看起来你没有在 fbconnect.php 上添加 JS 代码。我已经更新了答案。
    • 仍然在控制台面板中显示错误,例如Uncaught ReferenceError: FB is not defined 你能用我的所有代码编辑你的答案吗?
    • DId u 在 JS 上方添加
      这是初始化 FB 所必需的。
    • 好吧..终于成功了。但这里另一个问题来了。假设我已经从网站登录,在另一个选项卡中我打开了 facebook 并从另一个选项卡注销。当我再次来到我的网站 facebook 登录并引用页面时,它向我显示了像 Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user. thrown in src/base_facebook.php on line 1340. 这样的错误现在如何解决这个问题。
    猜你喜欢
    • 2012-05-04
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    相关资源
    最近更新 更多