Facebook Oauth Выйти - PullRequest
       49

Facebook Oauth Выйти

68 голосов
/ 04 мая 2010

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

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

Шаги для авторизации:

  1. Позвоните [ССЫЛКА: graph.facebook.com/oauth/authorize?client_id...]

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

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

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

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

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

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

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

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

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

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

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

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

Ответы [ 13 ]

41 голосов
/ 10 мая 2010

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

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

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

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

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

18 голосов
/ 21 марта 2012

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

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

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

18 голосов
/ 28 июля 2010

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

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

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

Работает ..

9 голосов
/ 09 октября 2012

Я могу программно выйти из 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 голосов
/ 30 мая 2010

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

1 голос
/ 22 марта 2018

Вот альтернатива принятому ответу, который работает в текущей (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>
1 голос
/ 14 марта 2014

С PHP я делаю:

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

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

Работает, это легко и просто, я просто пытаюсь найти изображение кнопки выхода из системы!

0 голосов
/ 28 февраля 2014

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

<a href="#" onclick="FB.logout();">Logout</a> 
0 голосов
/ 09 декабря 2013

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


        });
});});
0 голосов
/ 15 мая 2011

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

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

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

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

...