diff --git a/packages/core-components/src/components/AutoLogout/AutoLogout.tsx b/packages/core-components/src/components/AutoLogout/AutoLogout.tsx index 932ac7432b..ddc457842e 100644 --- a/packages/core-components/src/components/AutoLogout/AutoLogout.tsx +++ b/packages/core-components/src/components/AutoLogout/AutoLogout.tsx @@ -146,8 +146,14 @@ const ConditionalAutoLogout = ({ onPrompt: promptBeforeIdle ? onPrompt : undefined, promptBeforeIdle: promptBeforeIdle ? promptBeforeIdleMillis : undefined, syncTimers: 1000, + leaderElection: true, }); + // Check if the current tab is the only active tab. In practice, this gets checked once per second + if (timer.isLeader()) { + lastSeenOnlineStore.save(new Date()); + } + return ( <> {promptBeforeIdle && ( diff --git a/packages/core-components/src/components/AutoLogout/disconnectedUsers.ts b/packages/core-components/src/components/AutoLogout/disconnectedUsers.ts index c09e272eaa..643664e66f 100644 --- a/packages/core-components/src/components/AutoLogout/disconnectedUsers.ts +++ b/packages/core-components/src/components/AutoLogout/disconnectedUsers.ts @@ -51,16 +51,11 @@ export const useLogoutDisconnectedUserEffect = ({ ); if (nowSeconds - lastSeenOnlineSeconds > idleTimeoutSeconds) { identityApi.signOut(); + // Delete lastSeen time to prevent getting locked out after logout + lastSeenOnlineStore.delete(); + return; } } - /** - * save for the first time when app is loaded, so that - * if user logs in and does nothing we still have a - * lastSeenOnline value in store - */ - lastSeenOnlineStore.save(new Date()); - } else { - lastSeenOnlineStore.delete(); } }, [ autologoutIsEnabled,