Facebook Oauth Logout

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

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

Для авторизации выполняются следующие шаги:

  • Вызов [LINK: graph.facebook.com/oauth/authorize?client_id...]

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

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

Теперь у меня есть Oauth Token, и браузер пользователя зарегистрирован на моем сайте и в FB.

  1. Я называю кучу API-интерфейсов для работы: i. [LINK: graph.facebook.com/me?access_token =..]

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

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

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

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

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

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Попробуйте указать ссылку на ссылку или кнопку "yoursitename.com", где u хочет перенаправить обратно после того, как вы можете указать домашнюю страницу ur.

Это работает.

Ответ 3

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

Вы можете программно зарегистрировать пользователя нашего Facebook через перенаправление пользователь

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

Ответ 4

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

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

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

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

Ответ 5

Вы можете сделать это с помощью 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 браузера.

Ответ 6

С PHP я делаю:

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

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

Работает и хорошо и просто, просто пытаюсь найти графическую кнопку выхода из системы!

Ответ 7

Здесь альтернатива принятому ответу, который работает в текущей (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>

Ответ 8

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

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

Ответ 9

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

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

Ответ 10

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

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

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

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

Ответ 11

@Кристоф: просто добавьте someting. Я не думаю, что это правильный путь. Для выхода в оба места одновременно (<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;


        });
});});

Ответ 12

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

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

Ответ 13

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