Facebook Oauth Выход Из Системы


У меня есть приложение, которое интегрируется с Facebook с помощью Oauth 2.

Я могу авторизоваться с помощью FB и запросить их API REST и Graph отлично, но когда я авторизуюсь, активный сеанс браузера создается с помощью FB. Затем я могу выйти из своего приложения просто отлично, но сеанс с FB сохраняется, поэтому, если кто-то еще использует браузер, они увидят учетную запись предыдущих пользователей FB (если только предыдущий пользователь вручную не выйдет из FB).

шаги, которые я предпринимаю, чтобы авторизовать можно:

  1. вызов [ссылка: graph.facebook.com/oauth/authorize?client_id...]

этот шаг открывает окно входа/подключения Facebook, если браузер пользователя еще не имеет активного сеанса FB. Как только они входят в facebook, они перенаправляются на мой сайт с кодом, который я могу обменять на токен oauth.

  1. вызов [ссылка: graph.facebook.com/oauth/access_token?client_id..] с кодом из (1)

теперь у меня есть Oauth Маркер и браузер пользователя регистрируются на моем сайте и в FB.

  1. Я называю кучу API, чтобы делать вещи: т. е. [ссылка: graph.facebook.com/me?access_token=..]

допустим, мой пользователь хочет выйти из моего сайта. Условия FB требуют, чтобы я выполнял единый выход, поэтому, когда пользователь выходит из моего сайта, они также выходят из Facebook. Есть аргументы, что это немного глупо, но я рад подчиниться, если есть какие-либо способ на самом деле достижению этой цели.

Я видел предложения, которые:

A. Я использую JavaScript API для выхода из системы: FB.Соединять.выход из системы.)( Ну, я попытался использовать это, но это не сработало, и я не уверен точно, как это может быть, так как я не использую JavaScript API в любом случае на моем сайте. Сеанс не поддерживается или не создается API Javascript, поэтому я не уверен, как он должен истечь.

B. использование [ссылка: facebook.com/logout.php]. это было предложено администратором в Facebook форумы некоторое время назад. Приведенный пример связан со старым способом получения сеансов FB (не oauth), поэтому я не думаю, что могу применить его в своем случае.

C. используйте старый REST api expireSession или revokeAuthorization. Я попробовал оба из них, и хотя они истекают токен Oauth, они не аннулируют сеанс, который в настоящее время использует браузер, поэтому он не имеет никакого эффекта, пользователь не выходит из Facebook.

Я действительно нахожусь в немного свободном конце, Facebook документация неоднозначна, неоднозначна и довольно бедна. Поддержка на форумах отсутствует, на данный момент я даже не могу войти в форум facebook, и кроме того, их собственная интеграция FB Connect даже не работает на самом форуме. Не внушает особого доверия.

Ta для любой помощи вы можете предложить. Дерек

ps. Пришлось изменить HTTPS для ссылки, недостаточно кармы для публикации ссылок, что, вероятно, достаточно справедливо.

13 66

13 ответов:

у меня такая же проблема. Я также войти с помощью oauth (я использую RubyOnRails), но для выхода из системы, я делаю это с помощью JavaScript, используя ссылку, как это:

<a href="/logout" onclick="FB.logout();">Logout</a> 

Это первый вызов onclick функция и выполняет выход из системы на facebook, а затем нормальный /logout вызывается функция моего сайта.

хотя я бы предпочел решение на стороне сервера, но по крайней мере он делает то, что я хочу, он записывает меня на обоих сайтах.

Я также довольно новичок в Facebook integration stuff и играл с ним в первый раз, но мое общее ощущение заключается в том, что документация довольно распространена повсюду с большим количеством устаревших вещей.

Это работает на данный момент-и это документирована на сайте facebook @ http://developers.facebook.com/docs/authentication/. Не уверен, как недавно он был добавлен в документацию, почти уверен, что его там не было, когда я проверил февраль-2012

вы можете программно войти в систему пользователя наш Facebook, перенаправив пользователь к

https://www.facebook.com/logout.php?next=YOUR_REDIRECT_URL&access_token=USER_ACCESS_TOKEN

это решение больше не работает с текущим API FaceBook (кажется, это было непреднамеренно для начала)

http://m.facebook.com/logout.php?confirm=1&next=http://yoursitename.com;

попробуйте дать эту ссылку на вас выход ссылку или кнопку, где "yoursitename.com" где вы хотите перенаправить обратно после выхода может быть УР Домашняя страница.

это работает..

Я могу программно выйти из Facebook, перенаправив пользователя на

https://www.facebook.com/logout.php?next=YOUR_REDIRECT_URL&access_token=USER_ACCESS_TOKEN

URL-адрес, указанный в следующем параметре, должен быть URL-адресом с тем же базовым доменом, что и ваше приложение, как определено в настройках Вашего приложения.

Подробнее:https://developers.facebook.com/docs/authentication

вы можете сделать это с помощью access_token:

$access_array = split("\|", $access_token);

$session_key = $access_array[1];

можно использовать $session key в PHP SDK для создания функционального URL выхода из системы.

$logoutUrl = $facebook->getLogoutUrl(array('next' => $logoutUrl, 'session_key' => $session_key));

это завершает сеанс facebook браузера.

С PHP я делаю:

<a href="?action=logout">logout.</a>

if(isset($_GET['action']) && $_GET['action'] === 'logout'){
    $facebook->destroySession();
    header(WHERE YOU WANT TO REDIRECT TO);
    exit();
}

работает и приятно и легко я просто пытаюсь найти кнопку выхода графический сейчас!

вот альтернатива принятому ответу, который работает в текущей (2.12) версии API.

<a href="#" onclick="logoutFromFacebookAndRedirect('/logout')">Logout</a>

<script>
    FB.init({
        appId: '{your-app-id}',
        cookie: true,
        xfbml: true,
        version: 'v2.12'
    });

    function logoutFromFacebookAndRedirect(redirectUrl) {
        FB.getLoginStatus(function (response) {
            if (response.status == 'connected')
                FB.logout(function (response) {
                    window.location.href = redirectUrl;
                });
            else
                window.location.href = redirectUrl;
        });
    }
</script>

мобильное решение, предложенное Sumit, отлично работает для AS3 Air:

html.location = "http://m.facebook.com/logout.php?confirm=1&next=http://yoursitename.com"

для разработчиков Python, которые хотят выйти из системы пользователя прямо из бэкэнда

в данный момент я пишу это, трюк с m.facebook.com больше не работает (по крайней мере, для меня), и пользователь перенаправляется на страницу входа в мобильный FB, которая, очевидно, не подходит для UX.

к счастью, FB PHP SDK имеет полу-готовое решение (если ссылка не ведет на getLogoutUrl() функция, просто поиск искать его на этой странице). Это тоже упоминается по крайней мере в одном другом на StackOverflow: Facebook php SDK getLogoutUrl () проблема.

кстати, я только что заметил, что Зак Гринберг все правильно в этом вопросе, но я добавляю свой ответ в качестве резюме для разработчиков Python.

примечание для ответа Кристофа : Facebook Oauth Logout Функция выхода из системы требует указания функции обратного вызова и завершится неудачей без это, по крайней мере в Firefox. Хром работает без обратного вызова.

FB.logout(function(response) {});

@Christoph: просто добавляю кое-что . я не думаю, что это правильно way.to выход из системы в обоих местах одновременно.(<a href="/logout" onclick="FB.logout();">Logout</a>).

Just add id to the anchor tag . <a id='fbLogOut' href="/logout" onclick="FB.logout();">Logout</a>



$(document).ready(function(){

$('#fbLogOut').click(function(e){ 
     e.preventDefault();
      FB.logout(function(response) {
            // user is now logged out
            var url = $(this).attr('href');
            window.location= url;


        });
});});

Update: это решение работает и просто в ФБ.logout ()' не работает, потому что браузер хочет, чтобы пользовательское взаимодействие фактически вызывало эту функцию, так что он знает - это пользователь, а не скрипт.

<a href="#" onclick="FB.logout();">Logout</a> 

Это просто введите: $facebook - >setSession (null); для выхода из системы