From effe08ec5cbd4b83418d03da0d0b3769e4a107d0 Mon Sep 17 00:00:00 2001 From: Sidney Alcantara Date: Thu, 2 Jun 2022 14:05:12 +1000 Subject: [PATCH] add error handler to auth --- .../ProjectSourceFirebase/useAuthUser.ts | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/sources/ProjectSourceFirebase/useAuthUser.ts b/src/sources/ProjectSourceFirebase/useAuthUser.ts index cce0edb4..8928710f 100644 --- a/src/sources/ProjectSourceFirebase/useAuthUser.ts +++ b/src/sources/ProjectSourceFirebase/useAuthUser.ts @@ -1,6 +1,7 @@ import { useEffect, useCallback } from "react"; import { useAtom, useSetAtom } from "jotai"; import { useAtomCallback } from "jotai/utils"; +import { useErrorHandler } from "react-error-boundary"; import { getIdTokenResult } from "firebase/auth"; import { @@ -15,6 +16,7 @@ import { firebaseAuthAtom } from "./init"; * Sets currentUser and userRoles based on Firebase Auth user */ export function useAuthUser() { + const elevateError = useErrorHandler(); // Get current user and store in atoms const [firebaseAuth] = useAtom(firebaseAuthAtom, globalScope); const setCurrentUser = useSetAtom(currentUserAtom, globalScope); @@ -33,22 +35,32 @@ export function useAuthUser() { const unsubscribe = firebaseAuth.onAuthStateChanged(async (user) => { setCurrentUser(user); - if (user) { - // Get user roles - const tokenResult = await getIdTokenResult(user); - const roles = (tokenResult.claims.roles as string[]) ?? []; - setUserRoles(roles); + try { + if (user) { + // Get user roles + const tokenResult = await getIdTokenResult(user); + const roles = (tokenResult.claims.roles as string[]) ?? []; + setUserRoles(roles); - // Update user settings doc with roles for User Management page - const _updateUserSettings = await updateUserSettings(); - if (_updateUserSettings) _updateUserSettings({ roles }); - } else { - setUserRoles([]); + // Update user settings doc with roles for User Management page + const _updateUserSettings = await updateUserSettings(); + if (_updateUserSettings) _updateUserSettings({ roles }); + } else { + setUserRoles([]); + } + } catch (e) { + elevateError(e); } - }); + }, elevateError); return () => { unsubscribe(); }; - }, [firebaseAuth, setCurrentUser, setUserRoles, updateUserSettings]); + }, [ + firebaseAuth, + setCurrentUser, + setUserRoles, + updateUserSettings, + elevateError, + ]); }