google-drive-api - 登录多个帐户时,Google 文件选择器会加载错误的文档

标签 google-drive-api google-picker

我们有以下场景:

  • 用户使用帐户 A 登录 Google 云端硬盘
  • 然后,用户添加一个新帐户并使用帐户 B 登录 Google 云端硬盘(此时有两个有效帐户)
  • 在帐户 B 中,用户点击云端硬盘中的“创建”按钮。我们的应用程序要求用户选择他想用于创建文件的帐户,然后用户选择帐户 B(他已经使用的帐户)。我们的应用程序显示了文件选择器,但他看到的文件是帐户 A 中的文件,而不是帐户 B 中的文件。

我们已遵循开发人员 API 指南中指示的所有步骤,包括设置授权 token 。这是我们的 createPicker 函数:

function createPicker() {
  if (pickerApiLoaded && oauthToken) {
    new google.picker.PickerBuilder()
      .addView(google.picker.ViewId.DOCS)
      .setSelectableMimeTypes(selectableMimes)
      **.setOAuthToken(oauthToken)**
      .setCallback(pickerCallback)
      .enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
      .build()
      .setVisible(true);
  }
}

这就是我们获取 oauthToken 值的方式:

gapi.auth.authorize({
          client_id: clientId,
          scope: scope,
          immediate: false,
        }, function(authResult) {
          if (authResult && !authResult.error) {
            **oauthToken = gapi.auth.getToken().access_token;**
            createPicker();
          }
        }); 

在调试时,我们已经确认,如果用户选择账户 A,我们将获得一个 oAuthToken,如果用户选择账户 B,我们将获得另一个。因此,我们为每个帐户发送不同的 token ,这是应该的。

知道为什么用户在选择账户 B(为账户 B 生成 token )后可以看到账户 A 上的文件吗?知道我们遗漏了什么或做错了什么吗?

最佳答案

默认情况下,选择器将显示在该浏览器中曾经访问过的任何公共(public)文件。这是一种奇怪的行为,很难让选择器完全按照你的意愿去做。

尝试使用功能 Feature.MINE_ONLY

  .enableFeature(google.picker.Feature.MINE_ONLY)

https://developers.google.com/picker/docs/reference#Feature

这将“在显示来自 Google Drive 的项目时仅显示用户拥有的文档。”

关于google-drive-api - 登录多个帐户时,Google 文件选择器会加载错误的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23940625/

相关文章:

web - 如何将统一网络播放器游戏上传到 Google Drive?

javascript - Google Drive API Picker v3(2018 年 5 月)窗口消失并给出 .split is not a function 错误

javascript - 防止 Google 选择器弹出窗口被浏览器阻止

google-api - 第 3 方 Cookie 和 Google Picker

google-drive-api - 如何在可索引文本中查找包含撇号的文档

ios - 注销用户的正确步骤

curl - 如何通过 Google Drive 的 API 访问与 Google API Explorer 相同的文件列表?

python - 通过 Python 从 Google Drive 备份文件

google-picker - Picker 说 setEnableSharedDrives() 不是函数