facebook logout only doing logout from website not

2019-06-08 01:43发布

I am doing the facebook login and logout from a website. So if a user wants to login into the site he will click on facebook login and when he will click on logout then he will automatically logout from both facebook and from the site as well. So all for that I have made my code like this In index.html my code is like this

<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>

and in fbconnect.php my code is like this

<?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>"
?>

and in logout.php my code looks like this

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

All this is doing the site logout but it is not doing the logout from facebook. So can someone kindly tell me how to do logout from both facebook and website at a same time? Any help and suggestions will be reallly appreciale. Thanks

2条回答
ゆ 、 Hurt°
2楼-- · 2019-06-08 02:27

Dont'use any redirect <a href='logout.php'>log out </a>

only need on action facebook session destroy

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

Then after you can use your site session destroy For more info :- PHP SDK - Facebook Logout

查看更多
不美不萌又怎样
3楼-- · 2019-06-08 02:30

Yes this will not do logout from Facebook.

I see you are using the JS SDK also so you need to use JS API for logout. You can do as

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

You need to add the following JS function, I see u already have FB.login

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

Make sure you have the following JS in fbconnect.php file so as to trigger the FB functions So the complete code is

<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>

In the file logout.php you can handle the logout code for your website.

Also for generating the logout using the PHP SDK you need to do as

$params = array( 'next' => 'page after logout' );

$logouturl = $facebook->getLogoutUrl($params); // $params is optional.

<a href="<?php echo $logouturl; ?>"> Logout </a>

I would suggest to use JS SDK for logout it works for sure and it logs out from Facebook as well.

查看更多
登录 后发表回答