diff --git a/packages/server-admin-ui-react19/src/actions.ts b/packages/server-admin-ui-react19/src/actions.ts index 7303c61a3..77cb54e03 100644 --- a/packages/server-admin-ui-react19/src/actions.ts +++ b/packages/server-admin-ui-react19/src/actions.ts @@ -23,11 +23,12 @@ export async function logoutAction(): Promise { if (!response.ok) { throw new Error(response.statusText) } - await fetchLoginStatus() } catch (error) { console.error('Logout failed:', error) - await fetchLoginStatus() } + // Reconnect WebSocket so admin event subscriptions are dropped + webSocketService.reconnect() + await fetchLoginStatus() } export function restartAction(): void { @@ -63,6 +64,9 @@ export async function loginAction( if (request.status !== 200) { return response.message } + // Reconnect WebSocket so the server subscribes the new authenticated + // connection to admin events (ACCESS_REQUEST, etc.) + webSocketService.reconnect() await fetchAllData() return null } diff --git a/packages/server-admin-ui-react19/src/services/WebSocketService.ts b/packages/server-admin-ui-react19/src/services/WebSocketService.ts index dc1c680e9..7f2d560ab 100644 --- a/packages/server-admin-ui-react19/src/services/WebSocketService.ts +++ b/packages/server-admin-ui-react19/src/services/WebSocketService.ts @@ -237,6 +237,9 @@ export class WebSocketService { case 'ACCESS_REQUEST': this.zustandSetState({ accessRequests: data } as Partial) break + case 'RECEIVE_LOGIN_STATUS': + this.zustandSetState({ loginStatus: data } as Partial) + break case 'DISCOVERY_CHANGED': this.zustandSetState({ discoveredProviders: data