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.
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.
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...
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:
- Dodaj nowe pozwolenie, o które wcześniej nie prosiłeś, aby wymusić ponowną autoryzację
- wyłapać błąd i ponownie autoryzować użytkownika ręcznie poprzez
auth_type=reauthorize
Aby uzyskać więcej informacji, skontaktuj się z nami]}
Idę po Rozwiązanie # 2, ponieważ wydaje się to być najbardziej prosta droga.
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. W każdym razie rozwiązaniem jest przekierowanie użytkowników do ponownej subskrypcji.
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
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
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"];
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