45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import { useRouter, useSegments } from "expo-router";
|
|
import { onAuthStateChanged } from "firebase/auth";
|
|
import { doc, getDoc } from "firebase/firestore";
|
|
import { useEffect } from "react";
|
|
import { auth, db } from "../firebase_config";
|
|
import { useUser } from "./ContextUser";
|
|
|
|
export function useAuthHandler() {
|
|
const router = useRouter();
|
|
const segments = useSegments();
|
|
const { setUser, setRole } = useUser();
|
|
|
|
useEffect(() => {
|
|
const unsubscribe = onAuthStateChanged(auth, async (currentUser) => {
|
|
if (!currentUser) {
|
|
setUser(null);
|
|
setRole(null);
|
|
router.replace("/login/login");
|
|
return;
|
|
}
|
|
|
|
const userDocRef = doc(db, "user", currentUser.uid);
|
|
const userDoc = await getDoc(userDocRef);
|
|
|
|
if (!userDoc.exists()) {
|
|
setUser(null);
|
|
setRole(null);
|
|
router.replace("/login/login");
|
|
return;
|
|
}
|
|
|
|
const { role } = userDoc.data();
|
|
setUser(currentUser);
|
|
setRole(role);
|
|
|
|
// Only redirect if we're on login page
|
|
const inAuthGroup = segments[0] === 'login';
|
|
if (inAuthGroup) {
|
|
router.replace("/(tabs)/home");
|
|
}
|
|
});
|
|
|
|
return unsubscribe;
|
|
}, []);
|
|
} |