@@ -217,6 +217,12 @@ protected function processAccessTokenCallback(OidcAccessToken $accessToken, Oidc
217217 $ settings ->keys ,
218218 );
219219
220+ // OIDC Logout Feature: Temporarily save token in session
221+ $ access_token_for_logout = $ idTokenText ;
222+ session ()->put ("oidctoken " , $ access_token_for_logout );
223+
224+
225+
220226 $ returnClaims = Theme::dispatch (ThemeEvents::OIDC_ID_TOKEN_PRE_VALIDATE , $ idToken ->getAllClaims (), [
221227 'access_token ' => $ accessToken ->getToken (),
222228 'expires_in ' => $ accessToken ->getExpires (),
@@ -284,4 +290,37 @@ protected function shouldSyncGroups(): bool
284290 {
285291 return $ this ->config ()['user_to_groups ' ] !== false ;
286292 }
293+
294+
295+ /**
296+ * OIDC Logout Feature: Initiate a logout flow.
297+ *
298+ * @throws OidcException
299+ *
300+ * @return string
301+ */
302+ public function logout () {
303+
304+ $ config = $ this ->config ();
305+ $ app_url = env ('APP_URL ' , '' );
306+ $ end_session_endpoint = $ config ["end_session_endpoint " ];
307+
308+ $ oidctoken = session ()->get ("oidctoken " );
309+ session ()->invalidate ();
310+
311+ if (str_contains ($ app_url , 'https:// ' )) {
312+ $ protocol = 'https:// ' ;
313+ } else {
314+ $ protocol = 'http:// ' ;
315+ }
316+
317+
318+
319+ return redirect ($ end_session_endpoint .'?id_token_hint= ' .$ oidctoken ."&post_logout_redirect_uri= " .$ protocol .$ _SERVER ['HTTP_HOST ' ]."/ " );
320+
321+
322+ }
323+
324+
325+
287326}
0 commit comments