Facebook OAuth Logout

Mam aplikację, która integruje się z Facebook za pomocą Oauth 2.

Mogę autoryzować za pomocą FB i odpytywać ich REST I Graph API doskonale, ale kiedy autoryzuję aktywną sesję przeglądarki tworzy się za pomocą FB. Mogę następnie wylogować się z mojej aplikacji, ale sesja z FB trwa, więc jeśli ktoś jeszcze korzysta z przeglądarki, zobaczy poprzednie konto FB (chyba że poprzedni użytkownik ręcznie wyloguje się z FB również).

Kroki, które podejmuję, aby autoryzować są:

  1. Call [LINK :graph.facebook.com/oauth/authorize?client_id...]

Ten krok otwiera okno Facebook login / connect, jeśli przeglądarka użytkownika nie ma jeszcze aktywnej sesji na FB. Po zalogowaniu się na facebook przekierowują na moją stronę z kodem, który mogę wymienić na token oauth.

  1. Call [LINK :graph.facebook.com/oauth/access_token?client_id..] z kodem od (1)

Teraz mam Token Oauth, a przeglądarka użytkownika jest zalogowana moja strona i na FB.

  1. Wzywam kilka API do robienia rzeczy: tzn. [LINK: graph.facebook.com/me?access_token=..]

Powiedzmy, że mój użytkownik chce wylogować się z mojej strony. Regulamin FB wymaga, abym wykonał pojedyncze wylogowanie, więc gdy użytkownik wyloguje się z mojej strony, jest również wylogowany z Facebook. Istnieją argumenty, że jest to trochę głupie, ale jestem szczęśliwy, aby zastosować, jeśli istnieje jakikolwiek sposób, aby faktycznie osiągnąć.

Widziałem propozycje że:

A. do wylogowania używam Javascript API: FB. Połącz się.logout (). Cóż, próbowałem tego użyć, ale to nie działa, i nie jestem pewien dokładnie, jak to możliwe, ponieważ nie używam Javascript API w żaden sposób na mojej stronie. Sesja nie jest utrzymywana ani tworzona przez API Javascript, więc nie jestem pewien, jak to ma wygasnąć albo.

B. użyj [LINK :facebook.com/logout.php]. zasugerował to jakiś czas temu admin na forach Facebook. Podany przykład odnosi się do starego sposobu pierwsze sesje FB (non-oauth), więc nie sądzę, że mogę zastosować go w moim przypadku.

C. użyj starego REST api expireSession lub revokeAuthorization. Próbowałem obu z nich i chociaż wygasają token Oauth, nie unieważniają sesji, której obecnie używa przeglądarka, więc nie ma żadnego efektu, użytkownik nie jest wylogowany z Facebook.

Jestem naprawdę trochę na luzie, dokumentacja Facebook jest niejednoznaczna, dwuznaczna i dość słaba. Wsparcie na forach nie istnieje, w tej chwili nie mogę nawet zalogować się na forum facebook, a poza tym, ich własna integracja FB Connect nie działa nawet na samym forum. Nie wzbudza pewności siebie.

Ta za każdą pomoc, jaką możesz zaoferować. Derek

Ps. Musiałem zmienić HTTPS na LINK, za mało karmy, aby publikować linki, co prawdopodobnie jest wystarczająco uczciwe.

Author: Derek Troy-West, 2010-05-04

13 answers

Mam ten sam problem. Loguję się również za pomocą OAuth (używam RubyOnRails), ale do wylogowania robię to za pomocą JavaScript, używając linku takiego jak:

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

To najpierw wywołuje funkcję onclick i wykonuje wylogowanie na facebook ' u, a następnie wywoływana jest normalna funkcja /logout mojej strony.

Chociaż wolałbym rozwiązanie serwerowe, ale przynajmniej robi to, co chcę, loguje mnie na obu stronach.

Jestem też całkiem nowy w kwestii integracji z Facebook ' em i grałem z nim za pierwszym razem, ale moje ogólne wrażenie jest takie, że dokumentacja jest dość rozproszona po całym miejscu z wieloma przestarzałymi rzeczami.
 41
Author: Christoph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-01 21:46:52

To działa od teraz - i jest udokumentowane na stronie facebook @ http://developers.facebook.com/docs/authentication/. Nie wiem, jak ostatnio został dodany do dokumentacji, jestem pewien, że nie było go tam, gdy sprawdzałem luty-2012

Możesz programowo logować użytkownika naszego Facebook poprzez przekierowanie użytkownik do

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

 18
Author: russau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-21 06:09:55

To rozwiązanie nie działa już z aktualnym API FaceBook ' a (wydaje się, że było to niezamierzone)

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

Spróbuj podać ten link na wypisz link lub przycisk gdzie "yoursitename.com" gdzie chcesz przekierować z powrotem po wylogowaniu może być Strona główna ur.

To działa..
 18
Author: sumit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-01 21:57:32

Mogę programowo logować użytkownika z Facebook ' a przekierowując użytkownika na

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

Adres URL podany w następnym parametrze musi być adresem URL z tą samą domeną bazową co aplikacja zdefiniowana w ustawieniach aplikacji.

Więcej Szczegółów: https://developers.facebook.com/docs/authentication

 7
Author: Tealc Wu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-13 16:29:40

Możesz to zrobić za pomocą access_token:

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

$session_key = $access_array[1];

Możesz użyć tego $session key w PHP SDK do wygenerowania funkcjonalnego adresu URL wylogowania.

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

To kończy sesję przeglądarki w serwisie facebook.

 5
Author: Zach Greenberger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-01 22:06:18

Z PHP robię:

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

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

Działa i jest miły i łatwy po prostu staram się znaleźć grafikę przycisku wylogowania teraz!

 1
Author: Mike Wells,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-14 10:53:17

Oto alternatywa dla zaakceptowanej odpowiedzi, która działa w bieżącej (2.12) wersji 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
Author: Pluc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-22 19:33:01

Mobilne rozwiązanie zaproponowane przez Sumit doskonale sprawdza się w AS3 Air:

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

 0
Author: shi11i,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-13 21:25:11

Dla programistów Pythona, którzy chcą wylogować użytkownika bezpośrednio z backendu

W tej chwili piszę to, sztuczka z m.facebook.com już nie działa (przynajmniej dla mnie), a użytkownik jest przekierowany na mobilną stronę logowania FB, co oczywiście nie jest dobre dla UX.

Na szczęście, FB PHP SDK ma częściowo udokumentowane rozwiązanie (jeśli link nie prowadzi do funkcji getLogoutUrl(), po prostu wyszukaj ją na tej stronie). Jest to również wspomniane w co najmniej jednym innym na StackOverflow: Facebook PHP SDK getLogoutUrl () problem.

BTW właśnie zauważyłem, że Zach Greenberg ma rację w tym pytaniu, ale dodaję swoją odpowiedź jako podsumowanie dla programistów Pythona.

 0
Author: Tomasz Zielinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:42

Notka do odpowiedzi Christopha: Facebook OAuth Logout Funkcja wylogowania wymaga podania funkcji zwrotnej i nie powiedzie się bez to, przynajmniej na Firefoksie. Chrome działa bez oddzwaniania.

FB.logout(function(response) {});
 0
Author: zoli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:42

@Christoph: tylko dodaję coś . nie sądzę, aby to było poprawne way.to Wyloguj się w obu miejscach jednocześnie.(<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
Author: Sohail,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-08 21:16:07

Update: To rozwiązanie działa i po prostu wezwanie do " FB.logout () ' nie działa, ponieważ przeglądarka chce, aby interakcja z użytkownikiem faktycznie wywołała tę funkcję, aby wiedziała - to Użytkownik, a nie skrypt.

<a href="#" onclick="FB.logout();">Logout</a> 
 0
Author: halkujabra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-28 11:17:15

To proste wystarczy wpisać: $facebook - > setSession( null); dla wylogowania

 -6
Author: Saiful Amri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-17 08:07:15