Trong vài ngày qua, tôi đã gặp phải một số vấn đề ngày càng có vấn đề với ứng dụng thời gian thực dài chạy. Tôi đã đi qua các bước bên dưới và đoạn mã ở dưới cùng chứa thông tin gỡ lỗi bổ sung từ ứng dụng.Lỗi làm mới OAuth2 API Google Drive thời gian thực
Khi trang đầu tiên mở trang thành công, yêu cầu mã thông báo OAuth và tải tài liệu thời gian thực [A]. Sau 50 phút (10 phút trước khi mã thông báo hết hạn), nó yêu cầu lại mã thông báo OAuth mới thành công [B]. Sau khi mã thông báo đầu tiên hết hạn, kết nối hiện đang mở bị lỗi trái phép 401 và yêu cầu mã thông báo oauth mới [C]. Điều này tự nó có vẻ như là một vấn đề vì nó phải tự cập nhật để sử dụng mã thông báo hợp lệ mới từ [B].
Tuy nhiên, ứng dụng sẽ vẫn ổn định với lỗi như thế này xảy ra - vì vậy ứng dụng sẽ được xử lý bằng cách đóng và mở lại tài liệu [D] và nhận mã thông báo OAuth mới. Thật không may vào thời điểm này, API thời gian thực nằm trong một vòng lặp vô hạn nhận được lỗi cho access_token [E].
Tất cả mã thông báo OAuth được yêu cầu bằng cách sử dụng gapi.auth.authorize với cùng phạm vi và không có lệnh gọi hàm setToken. Trước đây tôi đã thử sử dụng setToken, nhưng điều đó có chính xác cùng một vấn đề.
Câu hỏi thực tế Cách chính xác để xử lý việc làm mới mã thông báo OAuth cho API thời gian thực là gì? Làm thế nào tôi có thể ngăn chặn các lỗi lặp đi lặp lại bên trong các API ổ đĩa khi đóng và mở lại một tài liệu?
[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
Cảm ơn!
Xử lý mã token_refresh_required để chỉ cập nhật mã thông báo là đủ để khắc phục vấn đề lỗi lặp lại. Cảm ơn đã phản ứng nhanh chóng! –