Google多范围验证完成后,Calendar权限仍提示未验证问题求助
Google Calendar API调用出现「Google hasn't verified this app」错误排查
问题描述
我已完成Google应用的登录、Gmail及Calendar多范围验证,登录和Gmail权限可正常使用,但调用Calendar API时出现「Google hasn't verified this app」错误。
已确认以下事项:
- 登录、Gmail及Calendar的API均已完成验证
- 当前启用的范围及完整范围配置已确认正常(见附图)
- 应用验证状态已确认无误
调用范围的代码如下:
public function getConsent() { $client = new Google\Client(); $client->setApplicationName('App name'); $client->setScopes(Google\Service\Calendar::CALENDAR); $client->setAuthConfig('json-file'); $client->setAccessType('offline'); $client->setRedirectUri('https://web.com/calendario/google/callback'); $client->setPrompt('select_account consent'); $authUrl = $client->createAuthUrl(); return redirect()->to($authUrl); }
请问是否遗漏了验证流程中的步骤,或是需要为Calendar单独创建API凭证?
可能的原因及排查步骤
1. 确认Calendar权限范围的验证状态
虽然你提到已完成多范围验证,但需重点确认https://www.googleapis.com/auth/calendar这个具体范围是否在Google Cloud Console的OAuth consent screen中已提交并通过验证:
- 进入Google Cloud Console → 目标项目 → APIs & Services → OAuth consent screen
- 检查「Scopes for Google APIs」列表,确认
Calendar相关范围(即代码中CALENDAR对应的全权限范围)已被包含在已验证范围内 - 若该范围是后续新增的,必须重新提交验证请求——新增敏感/受限范围后,原验证结果不会自动覆盖新范围,需重新完成审核
2. 检查API凭证的关联配置
不需要为Calendar单独创建API凭证,但要确认当前使用的JSON凭证对应的OAuth 2.0客户端ID,是否正确关联了已验证的OAuth consent screen:
- 进入Google Cloud Console → 目标项目 → APIs & Services → Credentials
- 找到你使用的OAuth 2.0客户端ID,查看其关联的「OAuth consent screen」是否为已验证的配置(注意区分内部/外部用户类型)
- 若客户端ID是在验证完成后创建的,需确保它使用的是已通过验证的同意屏幕模板
3. 确认应用的发布状态
如果你的应用面向外部用户(允许非组织内用户使用),必须将OAuth consent screen设置为「发布」状态:
- 在OAuth consent screen页面,检查「Publishing status」是否为「Published」
- 若处于「Testing」状态,仅添加到测试用户列表的账号能正常使用,其他用户会触发未验证提示
4. 排查范围调用的匹配性
代码中使用的Google\Service\Calendar::CALENDAR对应全权限范围https://www.googleapis.com/auth/calendar,属于受限范围,需确保:
- 验证时提交的应用场景说明,明确包含了该全权限范围的使用用途,且审核通过
- 若之前仅验证了更窄的Calendar范围(如
calendar.readonly),现在调用全权限范围会触发未验证提示,需重新提交该范围的验证
5. 清除缓存或刷新授权
部分情况下,浏览器缓存或旧授权令牌会导致提示残留:
- 让测试用户清除浏览器缓存,或使用隐身模式重新发起授权流程
- 调用
$client->revokeToken()撤销旧令牌后,重新获取新的授权令牌
内容的提问来源于stack exchange,提问作者dfun
相关产品推荐
相关产品推荐

