From 35f00bfa672ccbdc179da5bbd0ebb67f7f657f8b Mon Sep 17 00:00:00 2001 From: Marshall Polaris Date: Wed, 20 Jul 2022 18:26:32 -0700 Subject: [PATCH] Slight refactoring to auth context code --- web/components/auth-context.tsx | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/web/components/auth-context.tsx b/web/components/auth-context.tsx index 9a2ac64f..12b84c72 100644 --- a/web/components/auth-context.tsx +++ b/web/components/auth-context.tsx @@ -1,7 +1,6 @@ import { createContext, useEffect } from 'react' import { User } from 'common/user' import { onIdTokenChanged } from 'firebase/auth' - import { auth, listenForUser, @@ -16,25 +15,32 @@ import { useStateCheckEquality } from 'web/hooks/use-state-check-equality' const CACHED_USER_KEY = 'CACHED_USER_KEY' +const ensureDeviceToken = () => { + let deviceToken = localStorage.getItem('device-token') + if (!deviceToken) { + deviceToken = randomString() + localStorage.setItem('device-token', deviceToken) + } + return deviceToken +} + export const AuthContext = createContext(null) export function AuthProvider({ children }: any) { const [currentUser, setCurrentUser] = useStateCheckEquality(null) + useEffect(() => { const cachedUser = localStorage.getItem(CACHED_USER_KEY) setCurrentUser(cachedUser && JSON.parse(cachedUser)) }, [setCurrentUser]) + useEffect(() => { return onIdTokenChanged(auth, async (fbUser) => { if (fbUser) { - let user: User | null = await getUser(fbUser.uid) + let user = await getUser(fbUser.uid) if (!user) { - let deviceToken = localStorage.getItem('device-token') - if (!deviceToken) { - deviceToken = randomString() - localStorage.setItem('device-token', deviceToken) - } - user = await createUser({ deviceToken }).then((r) => r as User) + const deviceToken = ensureDeviceToken() + user = (await createUser({ deviceToken })) as User } setCurrentUser(user) // Persist to local storage, to reduce login blink next time. @@ -55,7 +61,6 @@ export function AuthProvider({ children }: any) { if (currentUser) { identifyUser(currentUser.id) setUserProperty('username', currentUser.username) - return listenForUser(currentUser.id, setCurrentUser) } }, [currentUser, setCurrentUser])