Facebook Graph API odrzuca nowo utworzony token dostępu

Wcześniej dzisiaj, przepływ logowania Facebook naszej aplikacji internetowej przestał działać dla niektórych użytkowników. Gdy próbujemy pobrać bieżący profil, zwracany jest błąd. Twierdzi, że token dostępu, który właśnie wygenerowaliśmy przez przekierowanie użytkownika do przepływu logowania OAuth, został odrzucony.

Podany powód jest następujący:

Token dostępu jest nieprawidłowy, ponieważ użytkownik nie aktywował aplikacji przez okres dłuższy niż 90 dni

Dla mnie to nie ma sensu, ponieważ nie mamy przechowuj token dostępu w dowolnym miejscu, z wyjątkiem bieżącej sesji i odtwarzaj go za każdym razem, gdy użytkownik loguje się za pomocą Facebook.

Stacktrace Z Spring Social dla połączenia GET /me wygląda tak:

ERR c.s.f.v.resource.AuthenticationResource Exception when connecting with Facebook
org.springframework.social.RevokedAuthorizationException: The authorization has been revoked. Reason: The access token is invalid since the user hasn't engaged the app in longer than 90 days.
        at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleFacebookError(FacebookErrorHandler.java:85)
        at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:59)
        at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
        at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:775)
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:728)
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:702)
        at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:350)
        at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:220)
        at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:215)

Problem jest prawdopodobnie związany ze zmianami w API Facebook, ale nie widzę, jak to wpływa na krótkotrwałe tokeny dostępu, które tworzymy przy każdym logowaniu.

Author: Thomas, 2018-05-02

7 answers

Natknąłem się na ten problem, gdy nasze testy integracyjne zalogowały się z użytkownikiem testowym - następujący JSON wrócił z interfejsu Graph API:

{
    "error": {
        "message": "The access token is invalid since the user hasn't engaged the app in longer than 90 days.",
        "type": "OAuthException",
        "code": 190,
        "error_subcode": 493,
        "fbtrace_id": "F/1z2AsTRx8"
    },
    "timestamp_microsecond": "2018-05-30 11:22:01.353949"
}

To był większy problem, ponieważ nasi użytkownicy testów nie "angażują" się w aplikację jako taką. Aby to naprawić musiałem:

  • Zaloguj się na stronie programisty FB
  • Znajdź daną aplikację
  • Spójrz w role - > Testuj użytkowników, aby znaleźć odpowiedniego użytkownika
  • Kliknij przycisk Edytuj dla użytkownika, a następnie kliknij " Zaloguj się jako ten test user "
  • po zalogowaniu przejdź do Ustawienia - > Aplikacje i strony internetowe
  • Znajdź aplikację w zakładce "wygasła" dla aplikacji, z którymi użytkownik nie wchodził w interakcję przez okres dłuższy niż 90 dni
  • Kliknij przycisk "Wyświetl i edytuj" na wygasłej aplikacji
  • Kliknij "Odnów dostęp" w wyskakującym okienku

Po wykonaniu tych wszystkich czynności mój użytkownik testowy (i testy integracyjne) zadziałały ponownie.

 11
Author: Sam Critchley,
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-06-13 09:48:59

Odpowiedzi na Facebook:

Dzięki za kontakt. Jest to w rzeczywistości znany problem, który my są już śledzone w innym zgłoszeniu błędu.

Połączę Twój raport z istniejącym, żebyśmy mogli sobie poradzić z problemem w jednym miejscu. Zapoznaj się z tym wątkiem, aby uzyskać aktualizacje: http://developers.facebook.com/bugs/194772814474841/

Moim rozwiązaniem było użycie JS SDK, w moim przypadku działa poprawnie...

 7
Author: jmcastanos,
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-05-02 21:53:50

Update :

Wydaje się, że problem został naprawiony przez Facebook.


I zgłosiłem błąd W Facebook i obecnie (5/3/18) pracują nad rozwiązaniem.

Jest kilka obejść sugerowanych tutaj i w komentarzach błędów. Podsumowując:

  1. Dodaj nowe pozwolenie, o które wcześniej nie prosiłeś, aby wymusić ponowną autoryzację
  2. wyłapać błąd i ponownie autoryzować użytkownika ręcznie poprzez auth_type=reauthorize
  3. Aby uzyskać więcej informacji, skontaktuj się z nami]}

Idę po Rozwiązanie # 2, ponieważ wydaje się to być najbardziej prosta droga.

 6
Author: Thomas,
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-05-03 18:47:13

Znalazłem ten link w FB docs: Odświeżanie Tokenów Dostępu Użytkownika

Który wspomina, że po 90 dniach użytkownicy muszą przywrócić swój token, więc w przypadku takiego błędu powinniśmy po prostu przekierować użytkownika do ponownej rejestracji.

Wspominają nawet, że usuwają tokeny nieaktywnych użytkowników w górnej części tego dokumentu. Może zrobili błąd i usunęli wszystkie tokeny użytkowników. Zapowiedź FB W każdym razie rozwiązaniem jest przekierowanie użytkowników do ponownej subskrypcji.

 2
Author: Ofershap,
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-05-02 07:57:16

Błąd persist zgodnie z dyskusja

Zgodnie z komentarzem użytkownika wspomnianej dyskusji, cofnęliśmy uprawnienia każdemu użytkownikowi naszej aplikacji i zadziałało. W tym celu użyliśmy next graph api endpoint . Musieliśmy utrzymywać facebookid użytkowników.

Pozdrawiam

 1
Author: Gaston Perez,
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-05-03 14:41:44

ROZWIĄZANIE TYMCZASOWE W przypadku iOS musisz zmienić kod SDK, aby obsługiwać "ponowne autoryzowanie". Aby zmienić kod źródłowy musisz go pobrać używając CocoaPods. Następnie skopiuj następujące funkcje nad pods: https://github.com/mavris/FacebookFix

 0
Author: BlackM,
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-05-15 12:37:28

Dodaj kod uprawnień w aplikacji

Lubi

Android : fbLoginButton.setReadPermissions(Tablice.asList (EMAIL));

IOS: loginButton.readPermissions = @[@"public_profile", @ "email"];

 -1
Author: Kiyoung Lee,
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-05-02 07:18:28