我正在开发一个用户可以创建列表并公开共享的应用程序。列表的内容由我的站点作为网页呈现,但也作为创建它的用户驱动器中的文本文件存在。一切都是通过javascript进行的,并且运行良好,但我目前正在使用https://www.googleapis.com/auth/drive
范围。
这是一个非常可怕的许可,所以我想放弃它。但是,当用户尝试读取文件时,如果他们只有https://www.googleapis.com/auth/drive.file
范围,则在我通过共享流程运行它们之前,共享文件(由id访问)不存在。
我的猜测是虽然这是我的应用程序中创建的文件,但该文件从未在我的应用程序中由查看用户打开,因此它不符合该范围。这看起来有点傻,因为任何人(即使他们没有以任何用户身份登录)都可以仅使用其ID从谷歌下载该文件。
我想避免通过共享链接流程运行它们,因为如果用户尚未登录我的应用程序,它们或多或少地滞留在该屏幕上。该应用程序未作为该文件类型的查看器安装,因此它们不会作为用于打开它的建议应用程序显示。
我做错了什么,或者是否真的没有办法支持这个看似非常常见的用例,即通过应用程序打开网址让用户能够分享他们文件的链接?
我不明白为什么我需要完全访问用户的驱动器,因为我正在尝试访问甚至不在其驱动器中的文件。
注意:我也在文件的顶部安装了realtime-api,这也很有效,但是基本上没有任何关系。
一些相关的代码段在文件上创建和设置权限:
创建文件
gapi.client.load('drive', 'v2', function() {
var insertHash = {
'resource': {
mimeType: 'application/vnd.mysite.com',
title: title
};
};
gapi.client.drive.files.insert(insertHash).execute(next);
});
授予每个人权限
gapi.client.drive.permissions.insert({
fileId: $scope.id, resource: {
type: 'anyone',
role: 'writer'
}
}).execute(function(resp) {
console.log(resp);
});
尝试以查看方式访问该文件,但没有https://www.googleapis.com/auth/drive
范围
gapi.client.drive.files.get({fileId: $scope.id}).execute(function(resp) {
console.log(resp);
next(resp);
});