gpt4 book ai didi

google-api - Google Drive Realtime API OAuth2 刷新错误

转载 作者:行者123 更新时间:2023-12-04 17:36:22 25 4
gpt4 key购买 nike

在过去的几天里,我发现长时间运行的实时应用程序出现了越来越多的问题。我已经完成了以下步骤,底部的代码片段包含来自应用程序的其他调试信息。

当页面首次打开时,它成功请求 OAuth token 并加载实时文档 [A]。 50 分钟后( token 过期前 10 分钟),它成功重新请求新的 OAuth token [B]。在第一个 token 过期后,当前打开的连接会收到 401 未经授权的错误,并需要一个新的 oauth token [C]。这本身似乎是一个问题,因为它应该更新自己以使用来自 [B] 的新有效 token 。

然而,应用程序仍然应该能够应对发生的此类错误 - 因此可以通过关闭并重新打开文档 [D] 并获取另一个新的 OAuth token 来处理它。不幸的是,此时实时 API 处于无限循环中,获取 access_token [E] 错误。

所有 OAuth token 都使用具有相同范围的 gapi.auth.authorize 请求,并且不调用 setToken。我以前尝试过使用 setToken,但它有完全相同的问题。

实际问题
处理刷新实时 API 的 OAuth token 的正确方法是什么?关闭和重新打开文档时,如何防止驱动器 API 内部重复失败?

[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

谢谢!

最佳答案

我查看了您的问题,我认为您对两个主要问题的看法是正确的。

  • API 不会自动获取刷新的 token 。
  • 关闭和重新打开文档会导致定期出现“无法读取 null 的属性 'o'”错误。

  • 关于问题 1,我们在每次保存更改时以及在服务器到客户端连接不正常时(例如,在 401 错误之后)获取刷新的 token 。这显然没有涵盖您提前刷新 token 并且文档没有任何更改的情况。在这种情况下,即使您已经更新了 token ,您也会看到 401。我正在解决此问题,该问题将在连接正常时每 30 秒获取一次刷新的 token 。最终,我们希望这是由事件驱动的,以便立即获取 token ,但这有点复杂,因为它需要对 gapi.auth 进行更改。

    关于问题 2,根据我的测试,周期性错误似乎是虚假的(在内部,即使文档已关闭,我们仍在尝试刷新旧文档的 token ,这就是您获得“无法读取属性”的原因)错误)。我也在为此进行修复,但您仍然应该能够重新加载文档(尽管您会看到旧文档的大量垃圾错误)。如果情况不是这样并且您真的无法重新加载文档,请告诉我。

    我应该注意,当您收到 token 刷新错误时,您不需要重新加载文档。这表明传递给错误处理程序的 gapi.drive.realtime.Error 对象的 isFatal 属性为 false,这表明错误是可恢复的。对 token_refresh_required 错误的建议响应是刷新 token - 网络服务应该自动 catch 。如果这不起作用,请随时告诉我,因为这是一个错误。

    -- Brian(实时 API 开发人员)

    关于google-api - Google Drive Realtime API OAuth2 刷新错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17623682/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com