diff --git a/frontend/react-app/src/auth/LoginPage.jsx b/frontend/react-app/src/auth/LoginPage.jsx index 010c7dd..14a280f 100644 --- a/frontend/react-app/src/auth/LoginPage.jsx +++ b/frontend/react-app/src/auth/LoginPage.jsx @@ -1,15 +1,12 @@ import { useRef, useState, useEffect } from "react" import { Link, useNavigate, useLocation } from "react-router-dom" -import useAuth from "../hooks/useAuth" import axios from "../api/api" import "./LoginPage.css" const LOGIN_URL = "/login" const LoginPage = () => { - const { setAuth } = useAuth() - const navigate = useNavigate() const location = useLocation() const from = location.state?.from?.pathname || "/" diff --git a/frontend/react-app/src/context/AuthProvider.jsx b/frontend/react-app/src/context/AuthProvider.jsx deleted file mode 100644 index 563bf3d..0000000 --- a/frontend/react-app/src/context/AuthProvider.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import { createContext, useState } from "react"; - -const AuthContext = createContext({}); - -export const AuthProvider = ({ children }) => { - const [auth, setAuth] = useState({}); - - return {children}; -}; - -export default AuthContext; diff --git a/frontend/react-app/src/hooks/useAuth.jsx b/frontend/react-app/src/hooks/useAuth.jsx deleted file mode 100644 index 98b4265..0000000 --- a/frontend/react-app/src/hooks/useAuth.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import { useContext, useDebugValue } from "react"; -import AuthContext from "../context/AuthProvider"; - -const useAuth = () => { - const { auth } = useContext(AuthContext); - useDebugValue(auth, (auth) => (auth?.user ? "Logged In" : "Logged Out")); - return useContext(AuthContext); -}; - -export default useAuth; \ No newline at end of file diff --git a/frontend/react-app/src/hooks/useAxiosPrivate.jsx b/frontend/react-app/src/hooks/useAxiosPrivate.jsx deleted file mode 100644 index 15e87c8..0000000 --- a/frontend/react-app/src/hooks/useAxiosPrivate.jsx +++ /dev/null @@ -1,45 +0,0 @@ -import { axiosPrivate } from "../api/axios"; -import { useEffect } from "react"; - -import useRefreshToken from "./useRefreshToken"; -import useAuth from "./useAuth"; - -const useAxiosPrivate = () => { - const refresh = useRefreshToken(); - const { auth } = useAuth(); - - useEffect(() => { - const requestIntercept = axiosPrivate.interceptors.request.use( - (config) => { - if (!config.headers["Authorization"]) { - config.headers["Authorization"] = `Bearer ${auth?.accessToken}`; - } - return config; - }, - (error) => Promise.reject(error) - ); - - const responseIntercept = axiosPrivate.interceptors.response.use( - (response) => response, - async (error) => { - const prevRequest = error?.config; - if (error?.response?.status === 403 && !prevRequest?.sent) { - prevRequest.sent = true; - const newAccessToken = await refresh(); - prevRequest.headers["Authorization"] = `Bearer ${newAccessToken}`; - return axiosPrivate(prevRequest); - } - return Promise.reject(error); - } - ); - - return () => { - axiosPrivate.interceptors.request.eject(requestIntercept); - axiosPrivate.interceptors.response.eject(responseIntercept); - }; - }, [auth, refresh]); - - return axiosPrivate; -}; - -export default useAxiosPrivate; diff --git a/frontend/react-app/src/hooks/useRefreshToken.jsx b/frontend/react-app/src/hooks/useRefreshToken.jsx deleted file mode 100644 index a5d83cf..0000000 --- a/frontend/react-app/src/hooks/useRefreshToken.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "../api/api"; -import useAuth from "./useAuth"; - -const useRefreshToken = () => { - const { setAuth } = useAuth(); - - const refresh = async () => { - const response = await axios.get("/refresh", { - withCredentials: true, - }); - setAuth((prev) => { - console.log(JSON.stringify(prev)); - console.log(response.data.accessToken); - return { ...prev, accessToken: response.data.accessToken }; - }); - return response.data.accessToken; - }; - return refresh; -}; - -export default useRefreshToken; diff --git a/frontend/react-app/src/main.jsx b/frontend/react-app/src/main.jsx index d57872a..d8b9503 100644 --- a/frontend/react-app/src/main.jsx +++ b/frontend/react-app/src/main.jsx @@ -1,12 +1,12 @@ import ReactDOM from "react-dom/client"; import { createBrowserRouter, RouterProvider } from "react-router-dom" -import "./index.css" import App from "./App.jsx" import NotFoundPage from "./ui/NotFoundPage.jsx" import UserProfile from "./user/UserProfile.jsx" import RegisterPage from "./auth/RegisterPage.jsx" import LoginPage from "./auth/LoginPage.jsx" +import "./index.css" const token = localStorage.getItem("appToken") diff --git a/frontend/react-app/src/provider/authProvider.jsx b/frontend/react-app/src/provider/authProvider.jsx deleted file mode 100644 index 8080ec8..0000000 --- a/frontend/react-app/src/provider/authProvider.jsx +++ /dev/null @@ -1,42 +0,0 @@ -import axios from "axios"; -import { createContext, useContext, useEffect, useMemo, useState } from "react"; - -const AuthContext = createContext(); - -const AuthProvider = ({ children }) => { - // State to hold the authentication token - const [token, setToken_] = useState(localStorage.getItem("token")); - - // Function to set the authentication token - const setToken = (newToken) => { - setToken_(newToken); - }; - - useEffect(() => { - if (token) { - axios.defaults.headers.common["Authorization"] = "Bearer " + token; - localStorage.setItem("token", token); - } else { - delete axios.defaults.headers.common["Authorization"]; - localStorage.removeItem("token"); - } - }, [token]); - - // Memoized value of the authentication context - const contextValue = useMemo( - () => ({ - token, - setToken, - }), - [token] - ); - - // Provide the authentication context to the children components - return {children}; -}; - -export const useAuth = () => { - return useContext(AuthContext); -}; - -export default AuthProvider; diff --git a/frontend/react-app/src/routes/ProtectedRoute.jsx b/frontend/react-app/src/routes/ProtectedRoute.jsx deleted file mode 100644 index e07614a..0000000 --- a/frontend/react-app/src/routes/ProtectedRoute.jsx +++ /dev/null @@ -1,15 +0,0 @@ -import { Navigate, Outlet } from "react-router-dom"; -import { useAuth } from "../provider/authProvider"; - -export const ProtectedRoute = () => { - const { token } = useAuth(); - - // Check if the user is authenticated - if (!token) { - // If not authenticated, redirect to the login page - return ; - } - - // If authenticated, render the child routes - return ; -}; diff --git a/frontend/react-app/src/routes/index.jsx b/frontend/react-app/src/routes/index.jsx deleted file mode 100644 index ed3d110..0000000 --- a/frontend/react-app/src/routes/index.jsx +++ /dev/null @@ -1,66 +0,0 @@ -import { RouterProvider, createBrowserRouter } from "react-router-dom"; -import { useAuth } from "../provider/authProvider"; -import { ProtectedRoute } from "./ProtectedRoute" - -import Logout from "../pages/Logout" -import RegisterPage from "../pages/RegisterPage" -import LoginPage from "../components/LoginPage" -import App from "../App" - -const Routes = () => { - const { token } = useAuth() - - // Define public routes accessible to all users - const routesForPublic = [ - { - path: "/register", - element: , - }, - { - path: "/login", - element: , - }, - ] - - // Define routes accessible only to authenticated users - const routesForAuthenticatedOnly = [ - { - path: "/", - element: , // Wrap the component in ProtectedRoute - children: [ - { - path: "/", - element: , - }, - { - path: "/profile", - element:
User Profile
, - }, - { - path: "/logout", - element: , - }, - ], - }, - ] - - // Define routes accessible only to non-authenticated users - const routesForNotAuthenticatedOnly = [ - { - path: "/", - element:
Home Page
, - }, - { - path: "/login", - element: , - }, - ] - - // Combine and conditionally include routes based on authentication status - const router = createBrowserRouter([...routesForPublic, ...(!token ? routesForNotAuthenticatedOnly : []), ...routesForAuthenticatedOnly]) - - // Provide the router configuration using RouterProvider - return -} - -export default Routes;