Skip to content

Commit 462a4e7

Browse files
authored
fix(auth): avoid deep session snapshot watches (#414)
1 parent 9fef384 commit 462a4e7

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

src/runtime/app/composables/useUserSession.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ export function useUserSession(): UseUserSessionReturn {
163163
if (!authReady.value && !newSession?.isPending && !newSession?.isRefetching)
164164
authReady.value = true
165165
},
166-
{ immediate: true, deep: true },
166+
{ immediate: true },
167167
)
168168
}
169169

test/use-user-session.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -859,6 +859,28 @@ describe('useUserSession hydration bootstrap', () => {
859859
expect(auth.user.value).toEqual({ id: 'user-3', email: 'user3@example.com' })
860860
})
861861

862+
it('does not re-sync session for nested mutations within the current Better Auth snapshot', async () => {
863+
sessionAtom.value = {
864+
data: {
865+
session: { id: 'session-1', metadata: { role: 'member' } },
866+
user: { id: 'user-1', email: 'user@example.com' },
867+
},
868+
isPending: false,
869+
isRefetching: false,
870+
error: null,
871+
}
872+
873+
const useUserSession = await loadUseUserSession()
874+
const auth = useUserSession()
875+
const bridgedSession = auth.session.value
876+
877+
const metadata = sessionAtom.value.data!.session.metadata as { role: string }
878+
metadata.role = 'admin'
879+
await flushPromises()
880+
881+
expect(auth.session.value).toBe(bridgedSession)
882+
})
883+
862884
it('signOut navigates to redirects.logout when configured (and no onSuccess)', async () => {
863885
runtimeConfig.public.auth.redirects = { logout: '/logged-out' }
864886

0 commit comments

Comments
 (0)