谷歌文件选择器加载错误的文件时,登录到多个帐户



我们有以下场景:

  • 用户登录到Google Drive帐户A
  • 然后,用户添加一个新帐户并使用帐户B登录到Google Drive(此时两个有效的活跃帐户)
  • 在Account B中,用户单击Drive中的Create按钮。我们的应用程序要求用户选择他想要使用哪个帐户创建文件,用户选择帐户B(他已经在使用同一个帐户)。我们的应用程序显示了文件选择器,但他看到的文件是帐户A中的文件,而不是帐户b中的文件。

我们遵循了开发人员API指南中指示的所有步骤,包括设置授权令牌。下面是我们的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,我们得到一个不同的oAuthToken。因此,我们为每个帐户发送不同的令牌,就像它应该的那样。

是否知道为什么用户在选择帐户B(为帐户B生成令牌)之后可以看到帐户a上的文件?知道我们遗漏了什么或做错了什么吗?

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

尝试使用feature。MINE_ONLY

  .enableFeature(google.picker.Feature.MINE_ONLY)

https://developers.google.com/picker/docs/reference特性

这将"在显示Google Drive中的项目时仅显示用户拥有的文档"。

最新更新