Google实时模型更新onFileLoad

时间:2016-06-05 10:20:53

标签: oauth-2.0 authorization refresh google-oauth google-drive-realtime-api

我看到工作流程是启动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如何知道令牌?如何加快令牌过期以进行调试?

1 个答案:

答案 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: ...

注意后者没有争论。授权人不会重新加载文档。我认为这解释了所要求的逻辑。但是,它没有回答内部问题,加载器如何采用现有的授权程序或切换到新的授权程序。