@@ -83,51 +83,51 @@ const refreshController = async (req, res) => {
8383
8484 // We have a refresh token, use OpenID refresh flow
8585 try {
86- const openIdConfig = getOpenIdConfig ( ) ;
87- const tokenset = await openIdClient . refreshTokenGrant ( openIdConfig , refreshToken ) ;
88- const claims = tokenset . claims ( ) ;
89- const { user, error, migration } = await findOpenIDUser ( {
90- findUser,
91- email : claims . email ,
86+ const openIdConfig = getOpenIdConfig ( ) ;
87+ const tokenset = await openIdClient . refreshTokenGrant ( openIdConfig , refreshToken ) ;
88+ const claims = tokenset . claims ( ) ;
89+ const { user, error, migration } = await findOpenIDUser ( {
90+ findUser,
91+ email : claims . email ,
92+ openidId : claims . sub ,
93+ idOnTheSource : claims . oid ,
94+ strategyName : 'refreshController' ,
95+ } ) ;
96+
97+ logger . debug (
98+ `[refreshController] findOpenIDUser result: user=${ user ?. email ?? 'null' } , error=${ error ?? 'null' } , migration=${ migration } , userOpenidId=${ user ?. openidId ?? 'null' } , claimsSub=${ claims . sub } ` ,
99+ ) ;
100+
101+ if ( error || ! user ) {
102+ logger . warn (
103+ `[refreshController] Redirecting to /login: error=${ error ?? 'null' } , user=${ user ? 'exists' : 'null' } ` ,
104+ ) ;
105+ return res . status ( 401 ) . redirect ( '/login' ) ;
106+ }
107+
108+ // Handle migration: update user with openidId if found by email without openidId
109+ // Also handle case where user has mismatched openidId (e.g., after database switch)
110+ if ( migration || user . openidId !== claims . sub ) {
111+ const reason = migration ? 'migration' : 'openidId mismatch' ;
112+ await updateUser ( user . _id . toString ( ) , {
113+ provider : 'openid' ,
92114 openidId : claims . sub ,
93- idOnTheSource : claims . oid ,
94- strategyName : 'refreshController' ,
95115 } ) ;
96-
97- logger . debug (
98- `[refreshController] findOpenIDUser result: user=${ user ?. email ?? 'null' } , error=${ error ?? 'null' } , migration=${ migration } , userOpenidId=${ user ?. openidId ?? 'null' } , claimsSub=${ claims . sub } ` ,
116+ logger . info (
117+ `[refreshController] Updated user ${ user . email } openidId (${ reason } ): ${ user . openidId ?? 'null' } -> ${ claims . sub } ` ,
99118 ) ;
119+ }
120+
121+ const token = setOpenIDAuthTokens ( tokenset , req , res , user . _id . toString ( ) , refreshToken ) ;
100122
101- if ( error || ! user ) {
102- logger . warn (
103- `[refreshController] Redirecting to /login: error=${ error ?? 'null' } , user=${ user ? 'exists' : 'null' } ` ,
104- ) ;
105- return res . status ( 401 ) . redirect ( '/login' ) ;
106- }
107-
108- // Handle migration: update user with openidId if found by email without openidId
109- // Also handle case where user has mismatched openidId (e.g., after database switch)
110- if ( migration || user . openidId !== claims . sub ) {
111- const reason = migration ? 'migration' : 'openidId mismatch' ;
112- await updateUser ( user . _id . toString ( ) , {
113- provider : 'openid' ,
114- openidId : claims . sub ,
115- } ) ;
116- logger . info (
117- `[refreshController] Updated user ${ user . email } openidId (${ reason } ): ${ user . openidId ?? 'null' } -> ${ claims . sub } ` ,
118- ) ;
119- }
120-
121- const token = setOpenIDAuthTokens ( tokenset , req , res , user . _id . toString ( ) , refreshToken ) ;
122-
123- user . federatedTokens = {
124- access_token : tokenset . access_token ,
125- id_token : tokenset . id_token ,
126- refresh_token : refreshToken ,
127- expires_at : claims . exp ,
128- } ;
129-
130- return res . status ( 200 ) . send ( { token, user } ) ;
123+ user . federatedTokens = {
124+ access_token : tokenset . access_token ,
125+ id_token : tokenset . id_token ,
126+ refresh_token : refreshToken ,
127+ expires_at : claims . exp ,
128+ } ;
129+
130+ return res . status ( 200 ) . send ( { token, user } ) ;
131131 } catch ( error ) {
132132 logger . error ( '[refreshController] OpenID token refresh error' , error ) ;
133133 }
0 commit comments