使用G Suite Drive评论API无法获取评论/回复的作者邮箱
我之前帮别人排查过类似的场景,你遇到的这个作者对象里没有emailAddress字段的情况,核心原因基本围绕权限配置和API请求参数这两块,下面给你逐一拆解可行的解决方法:
检查OAuth权限范围是否足够
Drive API的评论接口,要获取作者邮箱,需要至少https://www.googleapis.com/auth/drive.readonly权限范围。如果你当前用的是drive.metadata.readonly这类更受限的范围,API只会返回作者的名称等基础信息,不会包含邮箱。请确认域范围委派中配置的权限列表里包含足够的权限(比如drive.readonly或更高权限的drive),并且域管理员已经在Admin Console中给服务账号授权了这些范围。请求时显式指定要返回的字段
Drive API默认不会返回所有可选字段,你需要在调用接口时通过fields参数明确要求返回author/emailAddress。举个例子:
调用评论列表API时,请求URL可以写成:GET https://www.googleapis.com/drive/v3/files/{fileId}/comments?fields=comments(author(emailAddress),content,createdTime,id)调用回复列表API时,类似这样:
GET https://www.googleapis.com/drive/v3/files/{fileId}/comments/{commentId}/replies?fields=replies(author(emailAddress),content,createdTime)这里的
fields参数可以根据你的需求,把需要的其他字段(比如评论内容、创建时间)也一起加上,确保API返回你需要的完整数据。确认域范围委派的身份模拟是否正确
在用域范围委派调用API时,必须通过subject参数指定要模拟的域内用户邮箱。如果没有设置subject,服务账号会以自身身份发起请求,这时候API返回的作者信息可能不会包含邮箱(因为服务账号不属于域内普通用户)。请检查你的代码中是否正确设置了这个参数,确保是模拟拥有该文件访问权限的域用户身份调用API。检查域的用户数据访问限制
有些域管理员会限制第三方应用获取用户的邮箱信息,请联系域管理员确认:在Admin Console的安全 > API控制 > 域范围委派中,你的服务账号是否被允许获取用户的个人信息(包括邮箱);另外,检查域的数据隐私设置,是否没有禁止这类数据的对外提供。
只要把这几个点逐一排查调整,应该就能拿到作者的emailAddress字段了。
内容的提问来源于stack exchange,提问作者vinit payal

