12

我的 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 设置不正确。这似乎对我没有影响;我已经测试了所有我能想到的组合,没有任何运气。

4

3 回答 3

5

OP 的回答中提到的 Google+ plus 对话对我来说是关键。有许多事情必须正确配置才能使其工作:

  1. Drive API 和 Drive SDK 均已为您的开发者帐户启用。
  2. 选择器上设置的 appId 与 clientId 的第一部分匹配,例如('1932384883-qI99fef9f9ghh9n99vvsqa9zxczx8cz8xcc.googleusercontent.com'中的'1932384883')
  3. 在 Drive SDK 配置中,定义一个开放 URL。URL 不必与从中打开选择器的 URL 完全匹配,但来源(例如https://domain.com)可以。
  4. 在“Web 应用程序的客户端 ID”部分中,上面的打开 URL 也必须在重定向 URI 列表中。来源必须在 javascript 来源列表中。
  5. 您可能还需要要求用户将您的应用“安装”到 Google Drive,或请求“drive.install”范围以及“drive.file”

上面的一个子集可能会起作用,但这是我需要设置的,以便对所选文件的简单 REST 请求返回 200 而不是 404。

于 2014-10-09T18:57:58.270 回答
1

正如Google+ 对话中首次建议的那样,问题可以通过以下方式解决:

  1. 确保在 Google 开发者控制台中启用了 Drive SDK(Drive API是另外一回事,仅启用它是不够的)。
  2. 为您的应用程序指定一个“打开 URL”。
于 2014-02-15T23:47:24.120 回答
0

除了设置应用 ID 之外,请确保您提供选择器的页面列在 API 控制台的 javascript 源中。应用 ID来源都需要匹配才能授权文件。

于 2013-10-02T20:41:19.527 回答