diff --git a/public/auth/oauth2/classes/auth.php b/public/auth/oauth2/classes/auth.php index c591d6528af..d93e976b9c0 100644 --- a/public/auth/oauth2/classes/auth.php +++ b/public/auth/oauth2/classes/auth.php @@ -34,9 +34,11 @@ use stdClass; use core\oauth2\issuer; use core\oauth2\client; +global $CFG; require_once($CFG->libdir.'/authlib.php'); require_once($CFG->dirroot.'/user/lib.php'); require_once($CFG->dirroot.'/user/profile/lib.php'); +require_once($CFG->dirroot.'/login/lib.php'); /** * Plugin for oauth2 authentication. @@ -175,12 +177,12 @@ class auth extends \auth_plugin_base { public function loginpage_idp_list($wantsurl) { $providers = \core\oauth2\api::get_all_issuers(true); $result = []; - if (empty($wantsurl)) { - $wantsurl = '/'; - } foreach ($providers as $idp) { if ($idp->is_available_for_login()) { - $params = ['id' => $idp->get('id'), 'wantsurl' => $wantsurl, 'sesskey' => sesskey()]; + $params = ['id' => $idp->get('id'), 'sesskey' => sesskey()]; + if (!empty($wantsurl)) { + $params['wantsurl'] = $wantsurl; + } $url = new moodle_url('/auth/oauth2/login.php', $params); $icon = $idp->get('image'); $result[] = ['url' => $url, 'iconurl' => $icon, 'name' => $idp->get_display_name()]; @@ -620,7 +622,11 @@ class auth extends \auth_plugin_base { complete_user_login($user, $this->get_extrauserinfo()); $this->update_picture($user); - redirect($redirecturl); + + if (empty($redirecturl)) { + $redirecturl = core_login_get_return_url(); + } + redirect(new moodle_url($redirecturl)); } /** diff --git a/public/auth/oauth2/login.php b/public/auth/oauth2/login.php index 949b5a10e4c..20b6c6d234c 100644 --- a/public/auth/oauth2/login.php +++ b/public/auth/oauth2/login.php @@ -25,7 +25,7 @@ require_once('../../config.php'); $issuerid = required_param('id', PARAM_INT); -$wantsurl = new moodle_url(optional_param('wantsurl', '', PARAM_URL)); +$wantsurl = optional_param('wantsurl', '', PARAM_URL); $PAGE->set_context(context_system::instance()); $PAGE->set_url(new moodle_url('/auth/oauth2/login.php', ['id' => $issuerid]));