我看到工作流程是启动authrorizer,给它文件加载器。所以,我们有一系列回调,onAuthrorized =>开始加载文件=>文件加载时doc.getModel()。 Here they say你如何获得模型。但是,我也发现gapi.drive.realtime.load(fileId, onFileLoaded, initializeModel, handleErrors)
最终可能会以TOKEN_REFRESH_REQUIRED结束,并且似乎TOKEN_REFRESH_REQUIRED可以在文档加载after some time of user inactivity后触发,这似乎与token expiration有关。如何重新授权去?我应该告诉客户他连接的当前模型是无效的吗?请注意我的应用程序从文件加载开始。所以,如果我去整个堆栈重新授权,它调用另一个文件加载,调用另一个文件加载将重新启动我的应用程序。它应该走的路吗?换句话说,有没有办法在不丢失现有连接的情况下刷新令牌?
实际存储的令牌在哪里?我没有看到我在授权上收到它。它没有传递给realtime.load。 realtime.load如何知道令牌?如何加快令牌过期以进行调试?
答案 0 :(得分:0)
我仍然不确定这是一个正确的答案,但这是我看到的ColorConverter,其中说我们应该提供空回调以重新授权
/**
* Reauthorize the client with no callback (used for authorization failure).
* @param onAuthComplete {Function} to call once authorization has completed.
*/
rtclient.Authorizer.prototype.authorize = function(onAuthComplete) {
function authorize() {
gapi.auth.authorize({client_id: rtclient.id, scope: ['install', 'file'],}, handleAuthResult)
}
function handleAuthResult(authResult) {
if (authResult && !authResult.error) {
hideAuthorizationButton() && onAuthComplete()
} else with (authorizationButton) {
display = 'block' ;
onclick = authorize;
}
}
您首先在函数中调用它来加载文档
(rtclient.authorizer ? rtclient.authorizer = identity : rtclient.authorize) (proceedToLoadingTheFile)
但是稍后,在超时时我们有代码
function handleErrors(e) { with(gapi.drive.realtime.ErrorType) {switch(e.type) {
case TOKEN_REFRESH_REQUIRED: rtclient.authorizer.authorize() ; break
case CLIENT_ERROR: ...
注意后者没有争论。授权人不会重新加载文档。我认为这解释了所要求的逻辑。但是,它没有回答内部问题,加载器如何采用现有的授权程序或切换到新的授权程序。