10

Jestem nieco zdezorientowany, jak działa facebook.logout (kontekst).Jak działa wylogowanie w Facebook SDK Android

Ponieważ nawet po wywołaniu wylogowania, jestem w stanie uzyskać dostęp do informacji, która wymaga auth_token. Jak to możliwe? Natknąłem się na ten temat, co pozwoliło mi nieco pomylić: https://stackoverflow.com/a/6597688/487940

Po przeczytaniu tej odpowiedzi, to jest moje pytanie: Więc jeśli użytkownik przyzna dostęp do [mojej] aplikacji, zawsze będzie uwierzytelniony, jeśli jest zalogowany [oficjalna] aplikacja na Facebooku? Nawet jeśli spróbuję zadzwonić na facebook.logout (kontekst) w [mojej] aplikacji, zostanie on zalogowany, a moja aplikacja będzie mogła nawiązywać połączenia z interfejsem API Facebooka? "

Niestety, nie jestem w stanie zrozumieć tego zachowania.

AKTUALIZACJA: Po przeczytaniu odpowiedzi Torida, jestem zdezorientowany funkcją facebook.logout(). Jaki jest cel tej funkcji, jeśli nie rejestruje ona użytkownika? Ponieważ nie widzę celu, aby już nazywać ten cel. Nie rejestruje użytkownika.

Odpowiedz

8

Dzieją się tu dwie niezależne rzeczy: 1) czy użytkownik uwierzytelnił twoją aplikację (z uprawnieniami) na Facebooku i 2) czy twój użytkownik jest zalogowany na Facebooku.

Uwierzytelnienie jest wymagane przy pierwszym użyciu aplikacji przez użytkownika i trwa do momentu wyraźnego anulowania autentykacji (np. Za pośrednictwem ustawień konta internetowego Facebooka -> Aplikacje -> Ustawienia aplikacji).

Logowanie może być wymagane za każdym razem, gdy użytkownik uruchomi aplikację. Ale jeśli używasz domyślnej autoryzacji SDK(), która próbuje wykonać logowanie jednokrotne (SSO), gdzie po zalogowaniu się aplikacja Facebook, twoja aplikacja jest automatycznie logowana i używa istniejącego tokena dostępu.

Jeśli używasz SSO, podczas przeprowadzania wylogowania nie ma to żadnego skutku, ponieważ prawdziwy wylogowanie musiałoby wylogować się z aplikacji Facebook - której użytkownik może nie lubić!

Można obejść ten problem poprzez robi Autoryzuj formularza

authorize(this, PERMISSIONS, FORCE_DIALOG_AUTH, new LoginDialogListener()); 

który unika SSO i wymusza logowanie dialogowe. Oczywiście zmusza to użytkownika do zalogowania się przy każdym uruchomieniu aplikacji - chyba że zapiszesz szczegóły logowania/tokena dostępu pod pokrywami (co robi SDK - sprawdź źródło).

+0

A zatem czy facebook.isSessionValid() to właściwy sposób sprawdzenia, czy użytkownik jest rzeczywiście zalogowany? Ponieważ funkcja facebook.isSessionValid() zwróciłaby wartość true, nawet gdy użytkownik był zalogowany. – harsimranb

+2

Nie sądzę, że pakiet SDK umożliwia określenie statusu logowania użytkownika podczas używania SSO. Logout() po prostu usuwa pliki cookie z twojej aplikacji/przeglądarki internetowej i usuwa znacznik accessToken. A isSessionValid() sprawdza, czy parametr accessToken jest poprawny. Więc po Twojej aplikacji wylogowanie() jestSessionValid zwróci false. Ale aplikacja Faceboko jest nadal zalogowana. Jeśli więc zrobisz logowanie przy użyciu SSO (domyślnie), które sprawdzisz za pomocą aplikacji Facebook, która wciąż ma ważny znacznik dostępu, który zostanie zwrócony do Twojej aplikacji bez przechodzenia przez użytkownika Zaloguj Się. – Torid

+1

facebook.isSessionValid zwraca wartość true, nawet po wywołaniu wylogowania() ... – harsimranb