调用Drive.Permissions.insert前如何判断邮箱是否关联Google账号
可行处理方案
Google 没对外开放能直接查询某个邮箱是否绑定了Google账号的公开API,做不到在调用权限接口前100%精准预判,但有几个落地就能用的处理方式,完全可以避开你碰到的报错:
- 最稳妥的方案:做异常捕获兜底
这也是实际开发里最常用的做法,根本不需要提前做校验,直接给Drive.Permissions.insert的调用包一层try-catch就行:如果调用时抛出了你碰到的那类特定报错,要么自动把sendNotificationEmails参数改成true重试,要么给用户弹提示,说明这个邮箱没绑Google账号,必须开通知才能给权限。
参考实现代码:function addUserPermission(fileId, email, notify) { try { Drive.Permissions.insert({ 'value': email, 'type': 'user', 'role': 'reader', 'withLink': false }, fileId, { 'sendNotificationEmails': notify }); } catch (err) { // 匹配到未绑账号且未开通知的特定报错 if (err.message.includes('you must check the "Notify people" box')) { // 两种处理逻辑选一个:要么弹提示让用户确认发通知,要么直接带通知重试 const userConfirm = confirm("目标邮箱没有关联Google账号,必须发送通知邮件才能完成授权,是否继续?"); if (userConfirm) { Drive.Permissions.insert({ 'value': email, 'type': 'user', 'role': 'reader', 'withLink': false }, fileId, { 'sendNotificationEmails': true }); } } else { // 其他类型的错误正常抛出,不要吞掉 throw err; } } } - 不推荐的预校验思路
有人试过用People API的查询接口、或者分享页的隐式校验逻辑提前判断,但这类方法误差很大:企业Workspace下的内部账号、关闭了个人信息公开权限的账号都可能被误判为未绑定账号,而且还需要额外申请接口权限,实用性远不如异常捕获。 - 避坑提醒
别想着爬登录页、账号找回页的接口做校验,这违反Google的服务条款,轻则接口被限流,重则关联的开发账号直接被封,完全得不偿失。
内容的提问来源于stack exchange,提问作者Ellen Spertus
相关产品推荐
相关产品推荐

