diff --git a/config/install/openid_connect.settings.yml b/config/install/openid_connect.settings.yml index 5217e2b..8c9673d 100644 --- a/config/install/openid_connect.settings.yml +++ b/config/install/openid_connect.settings.yml @@ -2,5 +2,6 @@ always_save_userinfo: true connect_existing_users: false override_registration_settings: false user_login_display: 'hidden' +replace_login_redirect: '' userinfo_mappings: timezone: zoneinfo diff --git a/config/schema/openid_connect.schema.yml b/config/schema/openid_connect.schema.yml index 4715cbf..5c5ea65 100644 --- a/config/schema/openid_connect.schema.yml +++ b/config/schema/openid_connect.schema.yml @@ -14,6 +14,9 @@ openid_connect.settings: user_login_display: type: string label: 'Show external providers in user login form' + replace_login_redirect: + type: string + label: 'Replacement for user/login redirect' userinfo_mappings: type: mapping label: 'OpenID Connect settings' diff --git a/openid_connect.install b/openid_connect.install index 97c45bd..73e1210 100644 --- a/openid_connect.install +++ b/openid_connect.install @@ -175,3 +175,15 @@ function openid_connect_update_8200() { $configuration->delete(); } } + +/** + * Add replace_login_redirect to settings. + */ +function openid_connect_update_8201() { + $config_factory = \Drupal::configFactory(); + + $config = $config_factory->getEditable('openid_connect.settings'); + $config->set('replace_login_redirect', ''); + $config->save(TRUE); +} + diff --git a/src/Form/OpenIDConnectSettingsForm.php b/src/Form/OpenIDConnectSettingsForm.php index cac24d4..70b331d 100644 --- a/src/Form/OpenIDConnectSettingsForm.php +++ b/src/Form/OpenIDConnectSettingsForm.php @@ -134,6 +134,12 @@ class OpenIDConnectSettingsForm extends ConfigFormBase implements ContainerInjec '#default_value' => $settings->get('user_login_display'), ]; + $form['replace_login_redirect'] = [ + '#title' => $this->t('Replace redirect to user/login e.g. user'), + '#type' => 'textfield', + '#default_value' => $this->configuration['replace_login_redirect'] ?? '', + ]; + $form['userinfo_mappings'] = [ '#title' => $this->t('User claims mapping'), '#type' => 'fieldset', @@ -178,6 +184,7 @@ class OpenIDConnectSettingsForm extends ConfigFormBase implements ContainerInjec ->set('connect_existing_users', $form_state->getValue('connect_existing_users')) ->set('override_registration_settings', $form_state->getValue('override_registration_settings')) ->set('user_login_display', $form_state->getValue('user_login_display')) + ->set('replace_login_redirect', $form_state->getValue('replace_login_redirect')) ->set('userinfo_mappings', $form_state->getValue('userinfo_mappings')) ->save(); } diff --git a/src/OpenIDConnectSession.php b/src/OpenIDConnectSession.php index 8324921..815a475 100644 --- a/src/OpenIDConnectSession.php +++ b/src/OpenIDConnectSession.php @@ -46,6 +46,11 @@ class OpenIDConnectSession { // Don't redirect to user/login. In this case redirect to the user profile. if (0 === strpos($destination, 'user/login')) { $destination = 'user'; + $config_factory = \Drupal::configFactory(); + $replace_login_redirect = $config_factory->get('openid_connect.settings')->get('replace_login_redirect'); + if (!empty($replace_login_redirect)) { + $destination = $replace_login_redirect; + } } $_SESSION['openid_connect_destination'] = $destination;