@@ -5,13 +5,33 @@ const { logoutUser } = require('~/server/services/AuthService');
55const { getOpenIdConfig } = require ( '~/strategies' ) ;
66
77const logoutController = async ( req , res ) => {
8+ // Entry log to confirm controller is invoked
9+ try {
10+ logger . info ( '[logoutController] invoked' , {
11+ method : req . method ,
12+ path : req . originalUrl || req . url ,
13+ hasCookiesHeader : Boolean ( req . headers . cookie ) ,
14+ hasAuthHeader : Boolean ( req . headers . authorization ) ,
15+ userId : req . user ?. id || req . user ?. _id || null ,
16+ openidId : req . user ?. openidId || null ,
17+ query : req . query || { } ,
18+ } ) ;
19+ } catch ( e ) {
20+ console . error ( '[logoutController] Logging failed during invocation:' , e . message ) ;
21+ }
822 const refreshToken = req . headers . cookie ? cookies . parse ( req . headers . cookie ) . refreshToken : null ;
923 try {
1024 const logout = await logoutUser ( req , refreshToken ) ;
1125 const { status, message } = logout ;
1226 res . clearCookie ( 'refreshToken' ) ;
1327 res . clearCookie ( 'token_provider' ) ;
1428 const response = { message } ;
29+ // Log any incoming redirect hints on request
30+ if ( req . query && ( req . query . redirect || req . query . redirect_uri ) ) {
31+ logger . info ( '[logoutController] query redirect detected' , {
32+ redirect : req . query . redirect || req . query . redirect_uri ,
33+ } ) ;
34+ }
1535 if (
1636 req . user . openidId != null &&
1737 isEnabled ( process . env . OPENID_USE_END_SESSION_ENDPOINT ) &&
@@ -27,14 +47,29 @@ const logoutController = async (req, res) => {
2747 ? openIdConfig . serverMetadata ( ) . end_session_endpoint
2848 : null ;
2949 if ( endSessionEndpoint ) {
30- response . redirect = endSessionEndpoint ;
50+ const postLogoutRedirect = process . env . OPENID_POST_LOGOUT_REDIRECT_URI ;
51+ const clientId = process . env . OPENID_CLIENT_ID ;
52+ let logoutUrl = `${ endSessionEndpoint } ` ;
53+ if ( clientId ) {
54+ logoutUrl += `${ logoutUrl . includes ( '?' ) ? '&' : '?' } client_id=${ encodeURIComponent ( clientId ) } ` ;
55+ }
56+ if ( postLogoutRedirect ) {
57+ logoutUrl += `${ logoutUrl . includes ( '?' ) ? '&' : '?' } post_logout_redirect_uri=${ encodeURIComponent ( postLogoutRedirect ) } ` ;
58+ }
59+ response . redirect = logoutUrl ;
60+ // logger.info('[logoutController] end_session_endpoint', { endSessionEndpoint, logoutUrl });
3161 } else {
3262 logger . warn (
3363 '[logoutController] end_session_endpoint not found in OpenID issuer metadata. Please verify that the issuer is correct.' ,
3464 ) ;
3565 }
3666 }
3767 }
68+ try {
69+ logger . info ( '[logoutController] responding' , { status, response } ) ;
70+ } catch ( e ) {
71+ console . error ( '[logoutController] Logging failed during response:' , e . message ) ;
72+ }
3873 return res . status ( status ) . send ( response ) ;
3974 } catch ( err ) {
4075 logger . error ( '[logoutController]' , err ) ;
0 commit comments