Intereting Posts
C #: проблема с командами оболочки Как создать пустой массив в PHP с предопределенным размером? Нужна консультация для создания оцифрованной системы приема билетов Хранение данных сеанса в файлах cookie Отобразить результат запроса в таблице $ _POST против $ HTTP_RAW_POST_DATA vs file_get_contents (php: // input)? Проблема с поиском запроса jQuery JSONP twitter Как запретить пользователю использовать «источник просмотра», чтобы посмотреть на мой PHP-код и скопировать его? отладка cakephp с netbeans – без переменных Как включить javascript-файл, используя php echo? Использование пространств имен PHP в приложении Zend Framework (v1) PHP получает значения, разделенные запятыми, которые не вложены Подходящая библиотека для записи PDF с использованием воспламенителя кода изменить адрес электронной почты отправителя в php-форму получателю Symfony 2.5 addViolationAt устарел, используйте buildViolation ()

Facebook PHP SDK – не выйдет из системы должным образом

Я искал часы для решения этой проблемы, но не могу найти тот, который работает для меня. Когда я нажимаю «Выход» на моем сайте, информация пользователя все еще отображается, и кнопка выхода из системы все еще отображается. Вот код:

require 'facebook-php-sdk/src/facebook.php'; $facebook = new Facebook(array( 'appId' => 'xxxx', 'secret' => 'xxxx', )); // Get User ID $user = $facebook->getUser(); var_dump($user); if ($user) { try { // Proceed knowing you have a logged in user who's authenticated. $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); $user = null; } } // Login or logout url will be needed depending on current user state. if ($_GET['logout'] == "yes") { setcookie('fbs_'.$facebook->getAppId(), '', time()-100, '/', 'http://gno.....ment/index.php'); session_destroy(); header("Location: ".$_SERVER['PHP_SELF'].""); } if ($user_profile) { $logoutUrl = $facebook->getLogoutUrl; } else { $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,publish_stream,user_status', 'canvas' => 1, 'fbconnect' => 0, 'redirect_uri' => 'http://gno.....ment/index.php')); } 

….. …..

 <?php if ($user): ?> <h3>You</h3> <img src="https://graph.facebook.com/<?php echo $user; ?>/picture"> <h3>Your User Object (/me)</h3> <pre><?php print_r($user_profile); ?></pre> <?php else: ?> <strong><em>You are not Connected.</em></strong> <?php endif ?> <?php if ($user): ?> <a href="<?php echo $logoutUrl; ?>">Logout of FB</a> <?php else: ?> <div> Login using OAuth 2.0 handled by the PHP SDK: <a href="<?php echo $loginUrl; ?>">Login with Facebook</a> </div> <?php endif ?> 

Кажется, что if ($_GET['logout'] == "yes") может быть ответом для меня, но я не могу заставить его работать. Я не знаю, откуда logout или где она определена?

Это, кажется, общая проблема, но я не могу понять это. Я бы очень признателен за помощь.

Сделать это с помощью PHP SDK очень просто, документация просто ужасна. Вам не нужно перенаправлять на Facebook. Вам просто нужно очистить сеанс, который устанавливает класс Facebook, есть функция для этого в базовом классе Facebook, называемом destroySession () . Здесь я делаю это на получение.

 require_once('libs/facebook.php'); $facebook = new Facebook(array( 'appId' => '1121111110112', 'secret' => 'bcfsaasaaaaaa2b7adsae3a4dd5' )); if(isset($_GET['action']) && $_GET['action'] === 'logout'){ $facebook->destroySession(); } 

$ Facebook-> getLogoutUrl () регистрирует пользователя вне Facebook.

Вы можете решить эту проблему, указав внешнюю проблему выхода из системы. Вы можете посмотреть здесь

для получения подробной информации. Это хороший учебник для этой проблемы.

Надеюсь это поможет

Чтобы ответить прямо на ваш вопрос

Я не знаю, откуда вышла регистрация или где она определена?

Когда вы создаете URL-адрес выхода из системы, добавьте дополнительный параметр 'logout'

 $logoutUrl = $facebook->getLogoutUrl(array( 'next'=>'http://yourdomain.com/facebook-test-search.php?logout=yes' )); 

Затем в вашем скрипте вы очищаете сеанс и файлы cookie, когда isset($_GET['logout'])

Вот как я выхожу из системы, используя последний PHP-SDK:

login.php

 require_once("php-sdk/facebook.php"); // Create our Application instance (replace this with your appId and secret). $facebook = new Facebook(array( 'appId' => 'xxx', 'secret' => 'xxx', )); // Get User ID $user = $facebook->getUser(); // We may or may not have this data based on whether the user is logged in. // // If we have a $user id here, it means we know the user is logged into // Facebook, but we don't know if the access token is valid. An access // token is invalid if the user logged out of Facebook. if ($user) { try { // Proceed knowing you have a logged in user who's authenticated. $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); $user = null; } } // Login or logout url will be needed depending on current user state. if ($user) { $logout_params = array('next'=>'http://www.pittsburghpartycentral.com/logout.php'); $logoutUrl = $facebook->getLogoutUrl($logout_params); } else { $login_params = array( 'scope' => 'email', 'display' => 'popup' ); $loginUrl = $facebook->getLoginUrl($login_params); } // This call will always work since we are fetching public data. $naitik = $facebook->api('/naitik'); ?> <!doctype html> <html xmlns:fb="http://www.facebook.com/2008/fbml"> <head> <title>php-sdk</title> <style> body { font-family: 'Lucida Grande', Verdana, Arial, sans-serif; } h1 a { text-decoration: none; color: #3b5998; } h1 a:hover { text-decoration: underline; } </style> </head> <body> <h1>php-sdk</h1> <?php if ($user): ?> <a href="<?php echo $logoutUrl; ?>">Logout (<?php echo $user_profile[first_name]; ?>)</a> <?php else: ?> <div> Login using OAuth 2.0 handled by the PHP SDK: <a href="<?php echo $loginUrl; ?>" onclick="javascript:void window.open('<?php echo $loginUrl; ?>','fb_popup','width=600,height=300,toolbar=0,menubar=0,location=0,status=0,scrollbars=0,resizable=0,left=0,top=0');return false;">Login with Facebook</a> </div> <?php endif ?> <h3>PHP Session</h3> <pre><?php print_r($_SESSION); ?></pre> <?php if ($user): ?> <h3>You</h3> <img src="https://graph.facebook.com/<?php echo $user; ?>/picture"> <h3>Your User Object (/me)</h3> <pre><?php print_r($user_profile); ?></pre> <?php else: ?> <strong><em>You are not Connected.</em></strong> <?php endif ?> <h3>Public profile of Naitik</h3> <img src="https://graph.facebook.com/naitik/picture"> <?php echo $naitik['name']; ?> </body> </html> 

logout.php

 <?php session_start(); //start session $_SESSION = array(); //clear session array session_destroy(); //destroy session ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Log Out</title> </head> <body> <p>You have successfully logged out!</p> <p>Return to the <a href="connect.php">connect</a> page</p> </body> </html> 

Я смог выйти из системы из моего приложения, используя:

 $facebook->destroySession(); 

 $facebook->getLogoutUrl(); 

делает пользователя выходить из фейсбука, а не из вашего приложения.

С этим была какая-то схожая проблема. Даже

 $facebook->destroySession(); 

не работает должным образом, пока я не удалил

 $facebook->getLogoutUrl(); 

звоните полностью. getLogOutUrl() добавил некоторый параметр, который позже getLogOutUrl() с моим .htaccess и привел к * «mod_fcgid: stderr: токен состояния CSRF не соответствует одной предоставленной« * ошибке ».

Поскольку у меня все еще есть PHP 5.3 на моем сервере CentOS 6.7 в 2016 году, и я не хочу брать на себя ответственность за обновление версии PHP, я по-прежнему использую старый facebookarchive / facebook-php-sdk вместо новой facebook / facebook-php библиотека -sdk-v4 .

И вот как я обрабатываю выход из системы в своем приложении:

 <?php require_once('facebook-php-sdk-3.2.3/src/facebook.php'); const TITLE = 'My amazing app'; const REDIRECT = 'https://example.com/myapp/'; #Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; #Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2; $client = new Facebook(array( 'appId' => REPLACE_ME, 'secret' => REPLACE_ME, )); if (isset($_REQUEST['logout'])) { $client->destroySession(); header('Location: ' . REDIRECT); exit(0); } if ($client->getUser()) { try { $me = $client->api('/me?fields=id,first_name,gender'); $body = '<PRE>' . print_r($me, TRUE) . '</PRE>'; } catch (FacebookApiException $ex) { error_log($ex); $body = '<PRE>' . htmlspecialchars($e->getMessage()) . '</PRE>'; } } else { $body = sprintf('<P><A HREF="%s">Login</A></P>', $client->getLoginUrl()); } ?> <!DOCTYPE HTML> <HTML> <HEAD> <TITLE><?= TITLE ?></TITLE> </HEAD> <BODY> <?= $body ?> <P><A HREF="<?= REDIRECT ?>?logout">Logout</A></P> </BODY> </HTML> 

Не забудь –

  1. Получить идентификатор и секретность веб-клиента в консоли Facebook
  2. Авторизовать https://example.com/myapp/ в одном месте

Я помню, что это была огромная боль в одном из моих приложений. Похоже, что, наконец, казалось, что это работает:

 jQuery(function() { /* ... */ FB.logout(); window.location = 'some url'; }); 

Я должен быть примерно таким же без jQuery (просто запустите FB.logout () при загрузке страницы). AFAIR Я просто не мог заставить это работать на стороне сервера на PHP. Надеюсь, поможет :).