W ciągu ostatnich kilku dni widziałem kilka coraz bardziej problematycznych problemów z długo działającą aplikacją w czasie rzeczywistym. Wykonałem poniższe czynności, a fragment kodu u dołu zawiera dodatkowe informacje o debugowaniu z aplikacji.Google Drive Realtime API OAuth2 Refresh Errors
Po pierwszym uruchomieniu strony żąda tokenu OAuth i ładuje dokument [A] w czasie rzeczywistym. Po 50 minutach (10 minut przed wygaśnięciem tokenu) pomyślnie przesłano żądanie nowego tokenu OAuth [B]. Po wygaśnięciu pierwszego tokenu aktualnie otwarte połączenie otrzymuje nieautoryzowany błąd 401 i wymaga nowego tokenu Oauth [C]. Samo w sobie wydaje się, że jest to problem, ponieważ powinien zaktualizować się, aby użyć nowego ważnego tokena z [B].
Aplikacja powinna jednak być odporna na występujący błąd - należy więc ją zamknąć, ponownie otwierając dokument [D] i pobierając kolejny nowy token OAuth. Niestety w tym momencie interfejs API czasu rzeczywistego znajduje się w nieskończonej pętli, uzyskując błędy dla klucza dostępu [E].
Wszystkie tokeny OAuth są wymagane przy użyciu luki.auth.authorize z tymi samymi zakresami i bez wywołania setToken. Wcześniej próbowałem używać setToken, ale miało to dokładnie te same problemy.
rzeczywistych pytań Co to jest poprawny sposób radzić sobie z orzeźwiający token OAuth dla API w czasie rzeczywistym? Jak mogę zapobiec powtarzającym się awariom wewnętrznym interfejsów API napędów podczas zamykania i ponownego otwierania dokumentu?
[A]
_aa: "1"
access_token: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXz9AYBkyympssqI"
client_id: "XXXXXXXXXXXXXXXX.apps.googleusercontent.com"
cookie_policy: undefined
expires_at: "1373610287"
expires_in: "3600"
g_user_cookie_policy: undefined
issued_at: "1373606687"
response_type: "token"
scope: Array[2]
state: ""
token_type: "Bearer"
[B]
_aa: "1"
access_token: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXV2kzG4EMUppi"
client_id: "XXXXXXXXXXXXXX.apps.googleusercontent.com"
cookie_policy: undefined
expires_at: "1373613288"
expires_in: "3600"
g_user_cookie_policy: undefined
issued_at: "1373609688"
response_type: "token"
scope: Array[2]
state: ""
token_type: "Bearer"
[C]
GET https://drive.google.com/otservice/bind?id=1B-XXXXXXXXXXXXXXXXXXXXX_nRizfqmT…&RID=rpc&SID=XXXXXXXXXXXXXXXXX&CI=0&AID=221&TYPE=xmlhttp&zx=ns6e5dr7rf4&t=1 401 (Unauthorized)
Drive Realtime API Error: token_refresh_required: The OAuth token must be refreshed.
[D]
[Close Realtime Document]
[Open Realtime Document]
_aa: "1"
access_token: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMHzJXm2dF-"
client_id: "XXXXXXXXXXXXXX.apps.googleusercontent.com"
cookie_policy: undefined
expires_at: "1373613918"
expires_in: "3600"
g_user_cookie_policy: undefined
issued_at: "1373610318"
response_type: "token"
scope: Array[2]
state: ""
token_type: "Bearer"
[E]
[x100] Uncaught TypeError: Cannot read property 'o' of null
Dzięki!
Obchodzenie token_refresh_required błąd tylko zaktualizować token był wystarczający, aby rozwiązać ten problem, powtarzającego się błędu. Dziękuję za szybką odpowiedź! –