如何通过Google Drive API PHP获取共享文件用户的邮箱地址
解决Google Drive API获取权限时emailAddress返回null的问题
咱们来一步步拆解你遇到的问题,主要有两个核心原因和对应的解决办法:
1. 未指定需要返回的字段
Google Drive API的listPermissions方法默认不会返回所有权限字段,emailAddress恰好不在默认返回的集合里。你需要显式通过fields参数指定要获取的信息,确保邮箱、角色这些字段被返回。
2. 权限类型本身不包含邮箱地址
不是所有权限类型都关联邮箱:
- 只有
user(个人用户)和group(群组)类型的权限会返回emailAddress domain(域级权限)、anyone(任何人可访问)这类权限没有绑定具体邮箱,所以emailAddress自然是null
修改后的可运行代码示例
// 调用listPermissions时明确指定需要的字段 $permissions = $this->drive->permissions->listPermissions( $file->id, ['fields' => 'permissions(id,emailAddress,role,type)'] ); foreach ($permissions->getPermissions() as $permission) { $role = $permission->getRole(); $type = $permission->getType(); // 只处理有邮箱的权限类型 if ($type === 'user' || $type === 'group') { $email = $permission->getEmailAddress(); echo "邮箱地址: {$email}, 角色: {$role}\n"; } else { // 处理无邮箱的权限场景 echo "权限类型: {$type}, 角色: {$role}\n"; } }
额外注意点
- 确认你的API服务账号权限足够:如果要访问共享给外部用户的文件,需要使用包含
https://www.googleapis.com/auth/drive或https://www.googleapis.com/auth/drive.readonly的scope - 如果是团队盘(Shared Drive)文件,要确保服务账号已被授予团队盘的访问权限,否则可能无法获取完整权限信息
内容的提问来源于stack exchange,提问作者Muhammad
相关产品推荐
相关产品推荐

