我们有以下场景:
- 用户登录到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
https://developers.google.com/picker/docs/reference特性.enableFeature(google.picker.Feature.MINE_ONLY)
这将"在显示Google Drive中的项目时仅显示用户拥有的文档"。