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.realtime
与gapi.auth2
中的函数一起使用,还是只需使用gapi.auth
?
答案 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();
}
};