Я делаю вход в facebook и выходим с веб-сайта. Поэтому, если пользователь хочет войти на сайт, он нажмет на facebook login, и когда он нажмет на выход, он автоматически выйдет из обеих сторон как с 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 и веб-сайта одновременно? Любая помощь и предложения будут весьма полезны. благодаря
Не пытайтесь переадресовать <a href='logout.php'>log out </a>
нужно только на действие facebook session destroy
if(isset($_GET['action']) && $_GET['action'] === 'logout'){ $facebook->destroySession(); }
После этого вы можете использовать сеанс сайта для уничтожения. Для получения дополнительной информации: – PHP SDK – выход в Facebook
Да, это не приведет к выходу из 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>
Убедитесь, что у вас есть следующий JS в файле fbconnect.php, чтобы вызвать функции 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.