Google Drive permissions().create()无法设置过期时间求助
解决Google Drive API创建权限时expirationTime被忽略的问题
我之前也碰到过一模一样的问题,你的代码逻辑看起来没啥毛病,但有几个容易被忽略的细节会导致expirationTime参数被API直接跳过,下面给你几个排查和解决的方向:
1. 检查OAuth授权范围是否足够
Google Drive API设置权限过期时间需要更高权限的授权范围,如果你当前用的是drive.file这种受限范围,是没法设置expirationTime的。你得确保授权时包含以下任一范围:
https://www.googleapis.com/auth/drive(全权限,适合测试或内部应用)https://www.googleapis.com/auth/drive.permissions(仅权限管理权限,更安全)
2. 针对共享驱动器添加专属参数
如果你的文件存在**共享驱动器(Shared Drive)**里,调用permissions().create()时必须加上supportsAllDrives=True参数,否则API会忽略所有和共享驱动器相关的高级配置(包括过期时间)。修改后的调用代码如下:
results = service.permissions().create( fileId=file_id, body=request_body, fields='emailAddress,expirationTime,id', supportsAllDrives=True # 新增这个参数 ).execute()
3. 验证expirationTime的格式和有效性
虽然你的代码生成格式看起来是对的,但可以再确认下生成的字符串是否严格符合RFC 3339格式(比如2024-05-20T15:30:00Z)。另外要确保时间是未来的时间点,如果设置的时间已经过期,API会自动忽略这个参数。你可以打印出来验证:
print(expiration_date_request) # 输出应该类似:2024-05-20T15:30:00Z
4. 确认API版本和服务初始化
确保你用的是Drive API v3版本(你的代码看起来没问题),同时服务对象初始化时没有遗漏配置。比如初始化代码应该是类似这样的:
from googleapiclient.discovery import build from google.oauth2.credentials import Credentials creds = Credentials.from_authorized_user_file('token.json', SCOPES) service = build('drive', 'v3', credentials=creds)
按照上面的步骤排查后,应该就能解决expirationTime被忽略的问题了。建议先从检查授权范围和共享驱动器参数开始,这两个是最常见的诱因。
内容的提问来源于stack exchange,提问作者Shawn. L
相关产品推荐
相关产品推荐

