mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-09-13 01:51:51 +00:00
🌉 Persist OIDC refresh-token recovery bridges in MongoDB
Store SSE OBO refresh-token recovery bridges in MongoDB instead of process-local memory so /api/auth/refresh can recover after worker restarts or cross-worker routing. Derive bridge expiry from REFRESH_TOKEN_EXPIRY so the recovery window matches the stale refreshToken cookie it repairs, and delete bridges after successful recovery.
This commit is contained in:
parent
13d118a2ea
commit
164ebaf09d
13 changed files with 469 additions and 223 deletions
|
|
@ -334,7 +334,11 @@ const refreshController = async (req, res) => {
|
|||
existingRefreshToken: bridgedRefreshToken,
|
||||
tenantId: retryUser.tenantId,
|
||||
});
|
||||
deleteRefreshTokenBridge({ oldRefreshToken: refreshToken });
|
||||
await deleteRefreshTokenBridge({
|
||||
oldRefreshToken: refreshToken,
|
||||
userId,
|
||||
tenantId: bridgeUser.tenantId,
|
||||
});
|
||||
return res
|
||||
.status(200)
|
||||
.send({ token, user: sanitizeUserForAuthResponse(retryUser) });
|
||||
|
|
|
|||
|
|
@ -770,7 +770,11 @@ describe('refreshController – OpenID path', () => {
|
|||
existingRefreshToken: 'bridged-refresh',
|
||||
tenantId: undefined,
|
||||
});
|
||||
expect(deleteRefreshTokenBridge).toHaveBeenCalledWith({ oldRefreshToken: 'stored-refresh' });
|
||||
expect(deleteRefreshTokenBridge).toHaveBeenCalledWith({
|
||||
oldRefreshToken: 'stored-refresh',
|
||||
userId: 'user-db-id',
|
||||
tenantId: 'tenant-1',
|
||||
});
|
||||
expect(res.status).toHaveBeenCalledWith(200);
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue