我们有以下场景:
- 用户使用帐户 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/