diff --git a/frontend-next/src/app/app/page.js b/frontend-next/src/app/app/page.js index 521d193..4120c2c 100644 --- a/frontend-next/src/app/app/page.js +++ b/frontend-next/src/app/app/page.js @@ -27,7 +27,7 @@ function Home() { // State variables for app page const [user, setUser] = useState(null); // user data const [loadingLoc, setLoadingLoc] = useState(true); // location variable loading, true = loading, false = finished loading - const [authUser] = useAuthState(auth) // auth user object (used to obtain other user object) + const [authUser, authLoading] = useAuthState(auth) // auth user object (used to obtain other user object) const [drawerOpen, setDrawerOpen] = useState(true); // drawer open state const [coords, setCoords] = useState(null) @@ -42,7 +42,7 @@ function Home() { // Authentication Verification / Redirection if Profile Data not Filled out useEffect(() => { - if (authUser) { + if (authUser && authLoading === false) { onValue(ref(database, `users/${authUser.uid}`), (userData) => { userData = userData.val(); if (userData) { @@ -51,8 +51,10 @@ function Home() { window.location.href = "/onboarding"; } }); + } else if (authLoading === false) { + window.location.href = "/login"; } - }, [authUser]) + }, [authLoading]) useEffect(() => { Geolocation.getCurrentPosition().then((position) => { diff --git a/frontend-next/src/app/chat/page.js b/frontend-next/src/app/chat/page.js index 9421a3c..3fed1f1 100644 --- a/frontend-next/src/app/chat/page.js +++ b/frontend-next/src/app/chat/page.js @@ -24,7 +24,7 @@ function Chat() { const [user, setUser] = useState(null); // user data const [chatRoomObj, setChatRoomObj] = useState(null); // Current chatroom object const [doneLoading, setDoneLoading] = useState(false) // is the page done loading or not - const [authUser] = useAuthState(auth) // auth user object (used to obtain other user object) + const [authUser, authLoading] = useAuthState(auth) // auth user object (used to obtain other user object) const [drawerOpen, setDrawerOpen] = useState(true); // drawer open state var windowSize = useWindowSize() @@ -38,7 +38,7 @@ function Chat() { // Authentication Verification / Redirection if Profile Data not Filled out useEffect(() => { - if (authUser) { + if (authUser && authLoading === false) { onValue(ref(database, `users/${authUser.uid}`), (userData) => { userData = userData.val(); if (userData) { @@ -47,8 +47,10 @@ function Chat() { window.location.href = "/onboarding"; } }); + } else if (authLoading === false) { + window.location.href = "/login"; } - }, [authUser]) + }, [authLoading]) // Users URL params to load proper chatroom, then logs the user into that room useEffect(() => { diff --git a/frontend-next/src/app/dm/page.js b/frontend-next/src/app/dm/page.js index d2487a5..f71beb2 100644 --- a/frontend-next/src/app/dm/page.js +++ b/frontend-next/src/app/dm/page.js @@ -24,7 +24,7 @@ function Chat() { const [user, setUser] = useState(null); // user data const [chatRoomObj, setChatRoomObj] = useState(null); // Current chatroom object const [doneLoading, setDoneLoading] = useState(false) // is the page done loading or not - const [authUser] = useAuthState(auth) // auth user object (used to obtain other user object) + const [authUser, authLoading] = useAuthState(auth) // auth user object (used to obtain other user object) const [drawerOpen, setDrawerOpen] = useState(true); // drawer open state var windowSize = useWindowSize() @@ -38,17 +38,19 @@ function Chat() { // Authentication Verification / Redirection if Profile Data not Filled out useEffect(() => { - if (authUser) { - onValue(ref(database, `users/${authUser.uid}`), (userData) => { - userData = userData.val(); - if (userData) { - setUser(userData); - } else { - window.location.href = "/onboarding"; - } - }); + if (authUser && authLoading === false) { + onValue(ref(database, `users/${authUser.uid}`), (userData) => { + userData = userData.val(); + if (userData) { + setUser(userData); + } else { + window.location.href = "/onboarding"; + } + }); + } else if (authLoading === false) { + window.location.href = "/login"; } - }, [authUser]) + }, [authLoading]) // Users URL params to load proper chatroom, then logs the user into that room useEffect(() => { diff --git a/frontend-next/src/app/user/page.js b/frontend-next/src/app/user/page.js index 07acab1..df8364d 100644 --- a/frontend-next/src/app/user/page.js +++ b/frontend-next/src/app/user/page.js @@ -3,10 +3,12 @@ import { useState, useEffect } from "react"; import { auth, database } from "../../../firebase-config"; import { ref, onValue, get } from "firebase/database"; -import { onAuthStateChanged } from "firebase/auth"; +import { useAuthState } from "react-firebase-hooks/auth" + // Refactored Component Imports + // Data Structure Imports import { ProfileRoom } from "../../components/app/profile/ProfileRoom"; import { ProfileEdit } from "../../components/app/profile/ProfileEdit"; @@ -31,6 +33,8 @@ function UserProfile() { const [isOwner, setIsOwner] = useState(false); // Determines if user is owner of profile const [friends, setFriends] = useState(false); // is user a friend? const [isPending, setPending] = useState(false); // is friend request pending? + const [authUser, authLoading] = useAuthState(auth) // auth user object (used to obtain other user object) + // Handles Edit State in Component, shares useState with ProfileEdit const [isEditing, setIsEditing] = useState(false); @@ -40,25 +44,25 @@ function UserProfile() { // Authentication useEffect(() => { - onAuthStateChanged(auth, (user) => { + if (authUser && authLoading === false) { const searchParams = new URLSearchParams(document.location.search); var userUID = searchParams.get("uid") - if (user) { - get(ref(database, `users/${user.uid}`)).then((userData) => { + onValue(ref(database, `users/${authUser.uid}`), (userData) => { userData = userData.val(); if (userData) { if (userData.uid == userUID) { setIsOwner(true); } - setUser(userData); setIsAuthenticated(true); + setUser(userData); } else { - window.location.href = "/onboarding"; + window.location.href = "/onboarding"; } - }); - } - }); - }, []); + }); + } else if (authLoading === false) { + window.location.href = "/login"; + } + }, [authLoading]); // Grabs profile user data useEffect(() => {