使用gapi.drive.realtime时是否有使用gapi.auth2进行身份验证的解决方法?

时间:2017-07-01 01:06:30

标签: javascript google-authentication google-drive-realtime-api

gapi.drive.realtime中存在一个错误,导致它无法使用auth2(See this Github issue。)以下是该错误的简要说明;使用旧的gapi.auth.authorize方法时,gapi.drive.realtime提供的功能可以正常工作:

gapi.auth.authorize({
    client_id: 'client-id.apps.googleusercontent.com',
    scope: 'https://www.googleapis.com/auth/drive.file',
    immediate: true
}, (response) => {
    if(response.error) {
        console.log("Error signing in!");
        console.log(response);
    } else {
        gapi.drive.realtime.load("file-id", (r) => console.log(r));
    }
});

创建实时会话,并将生成的文档对象记录到控制台,没有任何错误。但是,如果更改此代码以使用gapi.auth2中的等效函数:

gapi.auth2.authorize({
    client_id: 'client-id.apps.googleusercontent.com',
    scope: 'https://www.googleapis.com/auth/drive.file',
    prompt: 'none'
}, (response) => {
    if(response.error) {
        console.log("Error signing in!");
        console.log(response);
    } else {
        gapi.drive.realtime.load("file-id", (r) => console.log(r));
    }
});

登录成功完成,但在连接到文件时,会记录以下错误:

GET https://drive.google.com/otservice/gs?rctype=js&rcver=0&id=file-id 401 ()
api:452 Drive Realtime API Error: token_refresh_required: The OAuth token must be refreshed.

查看网络调试器,第一次和第二次尝试之间的真正区别在于,在第二次尝试期间,gapi.drive.realtime不会在标头中发送access_token,大概是因为它正在寻找它在gapi.auth而非gapi.auth2。这是错误。使用gapi.auth2.init进行授权也会显示相同的行为。

我想知道的是,是否有针对此错误的已知修复程序。我可以使用一些代码使gapi.drive.realtimegapi.auth2中的函数一起使用,还是只需使用gapi.auth

1 个答案:

答案 0 :(得分:1)

尝试使用此github google sample中有关如何实施代币刷新的示例,因为这似乎是您遇到的问题。

dmp.auth.conditionalRefreshAuth = function() {
  // We refresh the access token about 10 minutes before it expires.
  if (new Date().getTime() + 600000 > dmp.auth.accessTokenExpieryTimestamp) {
    dmp.auth.autoRefreshAuth();
  }
};