如何在Moodle中配置OAuth2服务调用接口获取完整用户信息
Moodle OAuth2 自定义获取用户完整信息配置方案
方案1:后台配置OAuth2服务映射(无需修改代码,优先推荐)
- 登录Moodle站点管理员账号,进入「网站管理」-「插件」-「认证」-「OAuth 2 服务」,找到你已配置完成的对应OAuth2发行方条目,点击编辑
- 找到「Scope 配置」字段,在已有
openid mail的基础上补充获取用户信息需要的scope,比如要获取姓名一般需要补充profilescope,具体scope名称可和OAuth2发行方确认 - 下拉找到「用户属性映射」配置区域,按需添加字段映射规则,示例如下:
- 将Moodle内
firstname(名字字段)映射到OAuth2返回的given_name字段(具体键名以实际userinfo接口返回的参数为准) - 将Moodle内
lastname(姓氏字段)映射到OAuth2返回的family_name字段 - 其他需要预填充的字段比如昵称、手机号等都可按该规则配置
- 将Moodle内
- 找到「Token端点URL」配置项,填入地址:
https://{oauthurl}/oauth/v1/token;再找到「Userinfo端点URL」配置项,填入地址:https://{oauthurl}/oauth/v1/userinfoMoodle的OAuth2认证插件原生会在授权回调流程中自动向配置的token端点请求access token,不需要手动实现token调用逻辑,拿到token后也会自动请求你配置的userinfo端点拉取用户信息
- 保存配置后清空Moodle全站缓存,测试新用户OAuth2登录即可看到对应字段自动预填充
方案2:自定义插件扩展(后台配置无法满足自定义字段处理逻辑时使用)
如果需要对返回的用户信息做自定义处理,可通过Moodle事件钩子扩展实现,不要直接修改核心代码避免后续版本升级覆盖修改内容:
- 创建本地自定义插件,监听
auth_oauth2_before_user_login或user_loggedin事件 - 参考代码片段如下:
// 本地插件的事件观察者逻辑 public static function handle_oauth2_user_login(\core\event\user_loggedin $event) { global $DB; $user = $DB->get_record('user', ['id' => $event->userid], '*', MUST_EXIST); // 校验是否为OAuth2登录用户 $oauth_link = $DB->get_record('auth_oauth2_linked_login', ['userid' => $user->id]); if (empty($oauth_link)) { return; } // 直接获取Moodle已请求到的access token,不需要自行调用token接口 $issuer = \auth_oauth2\api::get_issuer($oauth_link->issuerid); $oauth_client = $issuer->get_oauth2_client(); $access_token = $oauth_client->get_accesstoken(); // 调用userinfo接口拉取信息 $ch = curl_init('https://{oauthurl}/oauth/v1/userinfo'); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Bearer ' . $access_token ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); $userinfo = json_decode(curl_exec($ch), true); curl_close($ch); // 自定义处理字段更新 if (!empty($userinfo)) { $user->firstname = $userinfo['given_name'] ?? $user->firstname; $user->lastname = $userinfo['family_name'] ?? $user->lastname; // 其他字段处理逻辑 user_update_user($user); } }
- 按照Moodle插件开发规范注册事件观察者后,部署插件并清空缓存即可生效
内容的提问来源于stack exchange,提问作者doremi666
相关产品推荐
相关产品推荐

