为何谷歌授权页Google Calendar权限为可选,如何将其设置为必填?
问题原因
你遇到的权限可选问题是因为未添加OIDC协议必填的基础openid scope,仅请求profile和email两个身份类scope时,谷歌OAuth同意页会自动将身份类权限和日历API权限拆分为两个独立权限组,允许用户单独取消勾选非身份类的日历权限。
当你移除profile和email时,不存在混合的OIDC身份权限请求,同意页只会展示日历权限组,默认就是必填不可取消的状态,符合你的预期。
修复方案
在你的scope数组中补充openid这个OIDC基础scope即可,修改后的授权代码如下:
$client = new Google_Client(); $client->setApplicationName(config('app_name')); $client->setScopes([ 'openid', // 新增OIDC基础scope Google_Service_Calendar::CALENDAR, 'profile', 'email' ]); $client->setAuthConfig(config('credentials.google')); $client->setAccessType('offline'); $client->setPrompt('select_account consent'); return $client->createAuthUrl();
补充openid scope后,身份类权限和日历API权限会合并为一个授权组,同意页不会展示单独的勾选框,日历权限会变为必填状态,同时你仍然可以正常获取用户的邮箱、姓名等身份信息,不影响原有注册流程。
额外校验
如果修改后仍然没有生效,可以登录谷歌云控制台,进入OAuth同意屏幕配置页,确认你已经将openid、email、profile、Google Calendar四个scope都添加到了声明列表中,且应用验证时已经提交了这些scope对应的使用场景说明。
内容的提问来源于stack exchange,提问作者AmirRezaM75
相关产品推荐
相关产品推荐

