我的 Google Drive 集成 Web 应用程序在drive
范围内运行良好,但除非必要,否则使用如此广泛的范围是不好的做法。我想限制范围,drive.file
以便我只能访问应用程序创建的文件和使用 Google Picker 打开的文件,但我无法让它工作。
应用程序创建的文件可以毫无问题地打开。但是,无法访问使用 Google Picker 打开的文件;尝试下载此类文件会导致 404 错误。当我右键单击 Google Drive 中的文件并选择“查看授权应用程序”时,我的应用程序未列为授权应用程序之一。
如果范围扩大到drive
.
我编写了一个最小的测试页面,应该下载用户在 Google Picker 中选择的文件。该过程可以通过调用auth()
后跟showPicker()
. 代码的关键部分如下:
gapi.auth.authorize({
client_id: '123456789012.apps.googleusercontent.com',
scope: 'https://www.googleapis.com/auth/drive.file',
immediate: false
});
...
var picker = new google.picker.PickerBuilder()
.setAppId('123456789012')
.addView(new google.picker.DocsView(google.picker.ViewId.DOCS_IMAGES))
.setOAuthToken(gapi.auth.getToken().access_token)
.setCallback(onPickerAction)
.build();
picker.setVisible(true);
...
function onPickerAction(data) {
if ( data.action === google.picker.Action.PICKED ) {
var id = data.docs[0].id;
var request = new XMLHttpRequest();
request.open('GET', 'https://www.googleapis.com/drive/v2/files/' + id);
request.setRequestHeader('Authorization', 'Bearer ' + gapi.auth.getToken().access_token);
request.addEventListener('load', function() {
var item = JSON.parse(request.responseText);
console.log(item);
});
request.send();
}
}
一个相关的问题得出的结论是应用 ID 设置不正确。这似乎对我没有影响;我已经测试了所有我能想到的组合,没有任何运气。