【发布时间】:2018-09-02 08:36:38
【问题描述】:
我正在关注https://developers.google.com/drive/api/v3/quickstart/python 上的Quickstart。我已经通过页面启用了驱动器 API,加载了 credentials.json 并且可以成功列出我的谷歌驱动器中的文件。但是,当我想下载文件时,我收到了消息
`The user has not granted the app ####### read access to the file`
除了将该范围放入我的代码之外,我还需要做更多的事情还是需要激活其他东西?
SCOPES = 'https://www.googleapis.com/auth/drive.file'
client.flow_from_clientsecrets('credentials.json', SCOPES)
【问题讨论】:
-
如果您尚未请求令牌(即完成 OAuth 流程),则您尚未获得许可。 IE。在快速入门中,通常有与
if credentials.invalid: ...相关的代码,其中flow.run_local_server()之类的内容用于向用户显示提示,然后根据您的应用程序类型请求访问(也可能是刷新)令牌。 -
还要注意
drive.file范围意味着有关于文件访问的特殊规则。也就是说,用户必须“选择”您的应用来打开文件(或使用应用创建文件),以便您的应用获得使用该文件的权限。 -
所以,凭据不是无效的,否则我将无法列出内容。所以对于范围,
drive.file应该允许下载。 -
您的声明“
drive.file应该允许下载”通常是错误的。正如我上面提到的,对于drive.file范围内的文件访问有一些特殊规则。您提到遵循快速入门,它使用drive.metadata.readonly允许listing 所有文件。您仍然需要获得明确的用户权限才能获取内容,因为您使用的是drive.file范围和一个不是用您的应用程序创建的文件。因此,您必须要求用户使用您的应用程序打开文件。查看云端硬盘文件选择器代码。 -
从哪里获得“获取内容的显式用户权限”
标签: python google-drive-api google-oauth google-api-python-client