mirror of
https://github.com/rowyio/rowy.git
synced 2025-12-29 00:16:39 +01:00
add error handler to auth
This commit is contained in:
@@ -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,
|
||||
]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user