diff --git a/src/OpenIDConnect.php b/src/OpenIDConnect.php index 1aa8c0c..3b8f625 100644 --- a/src/OpenIDConnect.php +++ b/src/OpenIDConnect.php @@ -731,6 +731,8 @@ class OpenIDConnect { $this->userData->set('openid_connect', $account->id(), 'oidc_name', $userinfo['name']); } + $_SESSION['openid_connect_tokens'] = $context['tokens']; + // Allow other modules to add additional user information. $this->moduleHandler->invokeAll('openid_connect_userinfo_save', [ $account, diff --git a/src/Plugin/OpenIDConnectClientBase.php b/src/Plugin/OpenIDConnectClientBase.php index 02aabae..b5489cd 100644 --- a/src/Plugin/OpenIDConnectClientBase.php +++ b/src/Plugin/OpenIDConnectClientBase.php @@ -392,6 +392,9 @@ abstract class OpenIDConnectClientBase extends PluginBase implements OpenIDConne $endpoints = $this->getEndpoints(); $post_logout_redirect_url = $this->getRedirectUrl(); $uri = $endpoints['end_session'] . '?post_logout_redirect_uri=' . $post_logout_redirect_url; + if (isset($_SESSION['openid_connect_tokens']['id_token'])) { + $uri .= '&id_token_hint=' . $_SESSION['openid_connect_tokens']['id_token']; + } return $uri; } diff --git a/src/Routing/RouteSubscriber.php b/src/Routing/RouteSubscriber.php index 81ba411..8d9efeb 100644 --- a/src/Routing/RouteSubscriber.php +++ b/src/Routing/RouteSubscriber.php @@ -12,9 +12,9 @@ class RouteSubscriber extends RouteSubscriberBase { */ protected function alterRoutes(RouteCollection $collection) { - // Remove the default user.logout route. + // Reroute the default user.logout route. if ($route = $collection->get('user.logout')) { - $collection->remove('user.logout'); + $route->setDefault('_controller', '\Drupal\openid_connect\Controller\OpenIDConnectRedirectController::redirectLogout'); } }