Files
supabase/apps/studio/lib/auth.tsx
Sean Oliver 364f743054 Fix PostHog user identification persisting after signout (#40158)
- Add reset() method to PostHogClient class to clear user identification
- Call posthogClient.reset() before clearLocalStorage() in signout flow
- Include proper error handling and memory leak prevention
- Clear all pending state (identification, groups, events)

Resolves GROWTH-535
2025-11-06 15:51:56 -08:00

58 lines
1.6 KiB
TypeScript

import { useQueryClient } from '@tanstack/react-query'
import { PropsWithChildren, useCallback, useEffect } from 'react'
import { toast } from 'sonner'
import {
AuthProvider as AuthProviderInternal,
clearLocalStorage,
gotrueClient,
posthogClient,
useAuthError,
} from 'common'
import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state'
import { GOTRUE_ERRORS, IS_PLATFORM } from './constants'
const AuthErrorToaster = ({ children }: PropsWithChildren) => {
const error = useAuthError()
useEffect(() => {
if (error !== null) {
// Check for unverified GitHub users after a GitHub sign in
if (error.message === GOTRUE_ERRORS.UNVERIFIED_GITHUB_USER) {
toast.error(
'Please verify your email on GitHub first, then reach out to us at support@supabase.io to log into the dashboard'
)
return
}
toast.error(error.message)
}
}, [error])
return children
}
export const AuthProvider = ({ children }: PropsWithChildren) => {
return (
<AuthProviderInternal alwaysLoggedIn={!IS_PLATFORM}>
<AuthErrorToaster>{children}</AuthErrorToaster>
</AuthProviderInternal>
)
}
export function useSignOut() {
const queryClient = useQueryClient()
const { clearStorage: clearAssistantStorage } = useAiAssistantStateSnapshot()
return useCallback(async () => {
const result = await gotrueClient.signOut()
posthogClient.reset()
clearLocalStorage()
// Clear Assistant IndexedDB
await clearAssistantStorage()
queryClient.clear()
return result
}, [queryClient, clearAssistantStorage])
}