Moodle与Google OAuth2认证字段映射问题求助
Moodle Google OAuth2 externalIds映射到idnumber的解决办法
先搞定权限和字段返回问题
- 你当前用的
openid、profile、email权限拿不到externalIds,这个字段属于Google People API范畴,得额外添加https://www.googleapis.com/auth/userinfo.profile权限,或者直接调用People API的people.get接口。 - 去Google OAuth2 Playground里加上这个权限,调用
https://people.googleapis.com/v1/people/me?personFields=externalIds,先确认返回结果里确实有externalIds数组,不然映射根本无从谈起。
修正Moodle的字段映射
- 进入Moodle的Google OAuth2认证设置,字段映射别直接写
externalIds->idnumber,因为externalIds是数组结构,得指定具体类型,比如你的externalIds类型是account的话,就写externalIds[type="account"]->value。 - 如果Moodle默认的映射不支持这种嵌套数组解析,就得修改插件代码:
- 找到Moodle里Google OAuth2插件的目录,一般在
auth/oauth2/google/。 - 打开
auth.php,修改get_userinfo方法,手动提取需要的externalIds值赋值给idnumber,示例代码:
$userinfo = parent::get_userinfo($response); if (!empty($response->externalIds)) { foreach ($response->externalIds as $extId) { if ($extId->type === 'account') { // 这里换成你实际的externalIds类型 $userinfo['idnumber'] = $extId->value; break; } } } return $userinfo; - 找到Moodle里Google OAuth2插件的目录,一般在
验证是否生效
- 清除Moodle的OAuth2缓存,用新的Google账号登录一遍,查看新用户的idnumber字段是否已填充对应值。
- 要是还不行,开启Moodle的调试模式(在
config.php里设置$CFG->debug = DEBUG_DEVELOPER;),查看认证过程中的日志,确认是否有字段解析错误。
内容的提问来源于stack exchange,提问作者marco
相关产品推荐
相关产品推荐

