Ошибки обновления OAuth2 API Google Диска в реальном времени (часть 2)

Это продолжение ошибок обновления OAuth2 API Google Диска в реальном времени.

Поскольку обновление API реального времени было запущено в среду, я заметил некоторые дополнительные проблемы с обновлением токенов OAuth. По истечении срока действия токена OAuth API реального времени получает ошибку 401, как и ожидалось, и выдает событие ошибки в документе. Эта ошибка обрабатывается, и приложение запрашивает новый токен OAuth через gapi.auth.authorize, который успешно установлен в gapi.auth (проверено с помощью getToken). Однако этот токен, по-видимому, не используется API-интерфейсом реального времени, который получает стакук в состоянии постоянной загрузки, но не выдает никаких ошибок.

>>>> Page Load <<<<
1374822961806 ": GAPI Authorized" 
Object {state: "", access_token: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_DloepHbGho", token_type: "Bearer", expires_in: "3600", client_id: "XXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"…}
_aa: "1"
access_token: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_DloepHbGho"
client_id: "XXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"
cookie_policy: undefined
expires_at: "1374826561"
expires_in: "3600"
g_user_cookie_policy: undefined
issued_at: "1374822961"
response_type: "token"
scope: Array[2]
state: ""
token_type: "Bearer"

>>>> Document loaded successfully <<<<
Remote Size:  130.24 kB
Remote String Size:  22.01 kB
Final Remote Item Counts:
  Map :  409
  List :  118
  EditableString :  407
Total Inaccessible Items: 8
Total Unused Lists: 14

>>>> Wait for OAuth2 Token Timeout <<<<
GET https://drive.google.com/otservice/bind?id=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX…RID=rpc&SID=XXXXXXXXXXXXXXXXXXXXXXXXXXX&CI=0&AID=206&TYPE=xmlhttp&zx=7cirt7mulog0&t=1 401 (Unauthorized) api:87
Drive Realtime API Error: token_refresh_required: The OAuth token must be refreshed. api:477
Doc Load Error:  Sx {type: "token_refresh_required", message: "The OAuth token must be refreshed.", b: false, isFatal: false}

>>>> Handle Doc Load Error <<<<
1374826571645 ": Refreshing OAuth2 Token: " 
["https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/userinfo.email"]

>>>> Before refreshing call gapi.auth.getToken() <<<<
1374826571646 ": Current Token: " null

>>>> Refresh using gapi.auth.authorize() and do NOT call gapi.auth.setToken() <<<<
1374826571813 ": Refreshed OAuth2 Token: " 
Object {state: "", access_token: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_qnWk1NXWXHCmi", token_type: "Bearer", expires_in: "3600", client_id: "XXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"…}
_aa: "1"
access_token: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_qnWk1NXWXHCmi"
client_id: "XXXXXXXXXXXXXXX.apps.googleusercontent.com"
cookie_policy: undefined
expires_at: "1374830171"
expires_in: "3600"
g_user_cookie_policy: undefined
issued_at: "1374826571"
response_type: "token"
scope: Array[2]
state: ""
token_type: "Bearer"

>>>> After refreshing call gapi.auth.getToken() <<<<
1374826571814 ": New Token: " 
Object {state: "", access_token: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_qnWk1NXWXHCmi", token_type: "Bearer", expires_in: "3600", client_id: "XXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"…}
_aa: "1"
access_token: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_qnWk1NXWXHCmi"
client_id: "XXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"
cookie_policy: undefined
expires_at: "1374830171"
expires_in: "3600"
g_user_cookie_policy: undefined
issued_at: "1374826571"
response_type: "token"
scope: Array[2]
state: ""
token_type: "Bearer"

>>>> At this point the document is stuck in isPending and isSaving <<<<
>>>> Modifications to the document don't error but don't persist <<<<

Это известная проблема или есть лучший способ справиться с этим сценарием? Из того, что я могу сказать, это правильный способ обработки обновления токена на основе предыдущей публикации, связанной вверху.


person Grant Watters    schedule 27.07.2013    source источник
comment
Привет Грант. Я только что заметил вашу проблему - извините, что не заметил этого раньше. Вы все еще испытываете эту проблему или нашли обходной путь/исправление?   -  person Brian Cairns    schedule 14.08.2013
comment
К счастью, это было исправлено одним из ваших пушей в первую неделю августа. Мы смогли вернуться к запросу нового токена OAuth до того, как истечет срок действия старого, и API реального времени подберет его правильно. Спасибо за продолжение!   -  person Grant Watters    schedule 22.08.2013