Fixed isAdmin code in navbar and login

This commit is contained in:
Harshitha Shetty
2025-03-14 16:58:35 +05:30
parent 366dc07bb6
commit ba76b81890
2 changed files with 22 additions and 126 deletions

View File

@@ -15,10 +15,6 @@ function AuthPage() {
}); });
const [signin, setSignin] = useState(false); const [signin, setSignin] = useState(false);
const adminEmails = [
"harshitha.ss@somaiya.edu",
];
const notifyError = (message) => { const notifyError = (message) => {
toast.error(message); toast.error(message);
}; };
@@ -74,17 +70,8 @@ function AuthPage() {
)}?d=identicon`; )}?d=identicon`;
user.profilePicture = gravatarUrl; user.profilePicture = gravatarUrl;
if (adminEmails.includes(user.email)) {
await axios.post(`http://localhost:8080/api/user/make-admin/${user._id}`);
const updatedUser = await axios.get(`http://localhost:8080/api/user/${user._id}`);
user.isAdmin = updatedUser.data.isAdmin;
localStorage.setItem("isAdmin", user.isAdmin);
} else {
localStorage.setItem("isAdmin", false);
}
// ✅ Save user to localStorage
localStorage.setItem("user", JSON.stringify(user)); localStorage.setItem("user", JSON.stringify(user));
window.location.href = "/Welcome"; window.location.href = "/Welcome";
} }
} catch (error) { } catch (error) {
@@ -98,20 +85,6 @@ function AuthPage() {
window.location.href = "http://localhost:8080/auth/google"; window.location.href = "http://localhost:8080/auth/google";
}; };
useEffect(() => {
const queryParams = new URLSearchParams(window.location.search);
const email = queryParams.get("email");
if (email) {
if (adminEmails.includes(email)) {
localStorage.setItem("isAdmin", true);
} else {
localStorage.setItem("isAdmin", false);
}
}
}, []);
return ( return (
<> <>
<ToastContainer /> <ToastContainer />

View File

@@ -1,6 +1,6 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { FaUserCircle } from "react-icons/fa"; import { FaUserCircle } from "react-icons/fa";
import { NavLink, useNavigate } from "react-router-dom"; // Import NavLink for navigation import { NavLink, useNavigate } from "react-router-dom";
import axios from "axios"; import axios from "axios";
import { toast, ToastContainer } from 'react-toastify'; import { toast, ToastContainer } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css'; import 'react-toastify/dist/ReactToastify.css';
@@ -10,68 +10,31 @@ const Navbar = () => {
const [user, setUser] = useState(null); const [user, setUser] = useState(null);
const [isAdmin, setIsAdmin] = useState(false); const [isAdmin, setIsAdmin] = useState(false);
// useEffect(() => {
// const loggedInUser = localStorage.getItem("user");
// const adminStatus = localStorage.getItem("isAdmin");
// if (loggedInUser) {
// // ✅ Set user from localStorage
// setUser(JSON.parse(loggedInUser));
// if (adminStatus === "true") setIsAdmin(true);
// }
// // ✅ Even after refresh, reconfirm the user from backend
// axios.get("http://localhost:8080/api/user/profile", { withCredentials: true })
// .then((response) => {
// const userData = response.data.user;
// setUser(userData);
// console.log(userData);
// // ✅ Check if the user is admin (FROM BACKEND)
// if (userData.isAdmin == true) {
// setIsAdmin(true);
// localStorage.setItem("isAdmin", true);
// } else {
// setIsAdmin(false);
// localStorage.setItem("isAdmin", false);
// }
// console.log(isAdmin);
// })
// .catch((error) => {
// console.error("Error fetching user data:", error);
// toast.error("Failed to fetch user data.");
// });
// }, []);
useEffect(() => { useEffect(() => {
axios.get("http://localhost:8080/api/user/profile", { withCredentials: true }) axios.get("http://localhost:8080/api/user/profile", { withCredentials: true })
.then((response) => { .then((response) => {
const userData = response.data.user; const userData = response.data.user;
setUser(userData); setUser(userData);
setIsAdmin(userData.isAdmin);
if (userData.isAdmin) {
setIsAdmin(true);
localStorage.setItem("isAdmin", "true");
} else {
setIsAdmin(false);
localStorage.setItem("isAdmin", "false");
}
}) })
.catch((error) => { .catch((error) => {
console.error("Error fetching user data:", error); console.error("Error fetching user data:", error);
}); });
}, [user]); // ✅ Add `user` dependency to re-run when `user` updates }, []);
const NavlinkStyle = {
color: "white",
textDecoration: "none",
fontSize: "16px",
transition: "0.3s",
padding: "10px 15px",
borderRadius: "5px"
}
// Handle logout functionality
const handleLogout = async () => { const handleLogout = async () => {
try { try {
// Call the logout API
await axios.get("http://localhost:8080/auth/logout", { withCredentials: true }); await axios.get("http://localhost:8080/auth/logout", { withCredentials: true });
localStorage.clear(); localStorage.clear();
// Redirect to the login page after successful logout
navigate("/"); navigate("/");
} catch (error) { } catch (error) {
console.error("Error during logout:", error); console.error("Error during logout:", error);
@@ -108,76 +71,37 @@ const Navbar = () => {
<div style={{ display: "flex", gap: "30px" }}> <div style={{ display: "flex", gap: "30px" }}>
<NavLink to="/consolidated" style={NavlinkStyle}
{/* Consolidated buttons in the center */}
<NavLink to="/consolidated" style={{
color: "white",
textDecoration: "none",
fontSize: "16px",
transition: "0.3s",
padding: "10px 15px",
borderRadius: "5px"
}}
onMouseEnter={(e) => e.target.style.backgroundColor = "#660000"} onMouseEnter={(e) => e.target.style.backgroundColor = "#660000"}
onMouseLeave={(e) => e.target.style.backgroundColor = "transparent"}> onMouseLeave={(e) => e.target.style.backgroundColor = "transparent"}>
Faculty Consolidated Faculty Consolidated
</NavLink> </NavLink>
<NavLink to="/courseConsolidated" style={{ <NavLink to="/courseConsolidated" style={NavlinkStyle}
color: "white",
textDecoration: "none",
fontSize: "16px",
transition: "0.3s",
padding: "10px 15px",
borderRadius: "5px"
}}
onMouseEnter={(e) => e.target.style.backgroundColor = "#660000"} onMouseEnter={(e) => e.target.style.backgroundColor = "#660000"}
onMouseLeave={(e) => e.target.style.backgroundColor = "transparent"}> onMouseLeave={(e) => e.target.style.backgroundColor = "transparent"}>
Course Consolidated Course Consolidated
</NavLink> </NavLink>
<NavLink to="/departmentConsolidated" style={{ <NavLink to="/departmentConsolidated" style={NavlinkStyle}
color: "white",
textDecoration: "none",
fontSize: "16px",
transition: "0.3s",
padding: "10px 15px",
borderRadius: "5px"
}}
onMouseEnter={(e) => e.target.style.backgroundColor = "#660000"} onMouseEnter={(e) => e.target.style.backgroundColor = "#660000"}
onMouseLeave={(e) => e.target.style.backgroundColor = "transparent"}> onMouseLeave={(e) => e.target.style.backgroundColor = "transparent"}>
Department Consolidated Department Consolidated
</NavLink> </NavLink>
<NavLink to="/panelConsolidated" style={{ <NavLink to="/panelConsolidated" style={NavlinkStyle}
color: "white",
textDecoration: "none",
fontSize: "16px",
transition: "0.3s",
padding: "10px 15px",
borderRadius: "5px"
}}
onMouseEnter={(e) => e.target.style.backgroundColor = "#660000"} onMouseEnter={(e) => e.target.style.backgroundColor = "#660000"}
onMouseLeave={(e) => e.target.style.backgroundColor = "transparent"}> onMouseLeave={(e) => e.target.style.backgroundColor = "transparent"}>
Panel Panel
</NavLink> </NavLink>
{isAdmin && ( {isAdmin && (
<NavLink to="/AdminFacultyPage" style={{ <NavLink to="/AdminFacultyPage" style={NavlinkStyle}
color: "white",
textDecoration: "none",
fontSize: "16px",
transition: "0.3s",
padding: "10px 15px",
borderRadius: "5px",
backgroundColor: "#B22222"
}}
onMouseEnter={(e) => e.target.style.backgroundColor = "#660000"} onMouseEnter={(e) => e.target.style.backgroundColor = "#660000"}
onMouseLeave={(e) => e.target.style.backgroundColor = "#B22222"}> onMouseLeave={(e) => e.target.style.backgroundColor = "transparent"}>
Faculty Faculty
</NavLink> </NavLink>
)} )}
</div> </div>
<div> <div>
<button className="logout-button" onClick={handleLogout} style={{ <button className="logout-button" onClick={handleLogout} style={{
backgroundColor: "#ff4d4d", backgroundColor: "#660000",
color: "white", color: "white",
border: "none", border: "none",
padding: "10px 20px", padding: "10px 20px",
@@ -185,8 +109,7 @@ const Navbar = () => {
cursor: "pointer", cursor: "pointer",
transition: "0.3s" transition: "0.3s"
}} }}
onMouseEnter={(e) => e.target.style.backgroundColor = "##660000"} >
onMouseLeave={(e) => e.target.style.backgroundColor = "#ff4d4d"}>
Logout Logout
</button> </button>
</div> </div>
@@ -201,7 +124,7 @@ const Navbar = () => {
width: "40px", width: "40px",
height: "40px", height: "40px",
borderRadius: "50%", borderRadius: "50%",
border: "2px solid white", border: "2px solid #800000",
objectFit: "cover" objectFit: "cover"
}} }}
/> />