diff --git a/taskncoffee-app/src/App.jsx b/taskncoffee-app/src/App.jsx index 4dfba73..0a6f571 100644 --- a/taskncoffee-app/src/App.jsx +++ b/taskncoffee-app/src/App.jsx @@ -4,13 +4,14 @@ import { SignUp } from './pages/SignUp' import { AuthLayout } from './layouts/AuthLayout' import { Routes, Route, Navigate } from 'react-router' import Dashboard from './pages/Dashboard' +import RootRedirect from './pages/RootRedirect' function App() { return ( - } /> + } /> diff --git a/taskncoffee-app/src/pages/Dashboard.jsx b/taskncoffee-app/src/pages/Dashboard.jsx index b554f99..3be689b 100644 --- a/taskncoffee-app/src/pages/Dashboard.jsx +++ b/taskncoffee-app/src/pages/Dashboard.jsx @@ -58,7 +58,7 @@ export default function Dashboard() { useEffect(() => { if (authError) { console.log('Authentication error detected, redirecting to login...'); - navigate('/'); + navigate('/auth/login', { replace: true }); } }, [authError, navigate]); diff --git a/taskncoffee-app/src/pages/Login.jsx b/taskncoffee-app/src/pages/Login.jsx index f80d540..63d10aa 100644 --- a/taskncoffee-app/src/pages/Login.jsx +++ b/taskncoffee-app/src/pages/Login.jsx @@ -12,10 +12,11 @@ import { import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { login } from "@/api/auth.service" -import { Link } from "react-router" +import { Link, useNavigate } from "react-router" export function LoginPage({ className }) { + const navigate = useNavigate() const [username, setUsername] = useState("") const [password, setPassword] = useState("") const [isLoading, setIsLoading] = useState(false) @@ -33,6 +34,9 @@ export function LoginPage({ className }) { setSuccess("Login successful!") console.log("Logged in:", result) + // Redirect to dashboard after successful login + navigate('/dashboard', { replace: true }) + } catch (err) { setError(err.detail || "Login failed. Please check your credentials.") console.error("Login error:", err) diff --git a/taskncoffee-app/src/pages/RootRedirect.jsx b/taskncoffee-app/src/pages/RootRedirect.jsx new file mode 100644 index 0000000..19cf983 --- /dev/null +++ b/taskncoffee-app/src/pages/RootRedirect.jsx @@ -0,0 +1,50 @@ +import { useEffect, useState } from 'react'; +import { useNavigate } from 'react-router'; +import { jwtexp } from '@/lib/utils'; + +export default function RootRedirect() { + const navigate = useNavigate(); + const [checking, setChecking] = useState(true); + + useEffect(() => { + const checkAuthAndRedirect = async () => { + try { + const token = localStorage.getItem('access_token'); + + if (token) { + console.log('Token found, validating...'); + const isTokenValid = await jwtexp(token); + + if (isTokenValid) { + console.log('Token is valid, redirecting to dashboard...'); + navigate('/dashboard', { replace: true }); + } else { + console.log('Token is invalid, redirecting to login...'); + navigate('/auth/login', { replace: true }); + } + } else { + console.log('No token found, redirecting to login...'); + navigate('/auth/login', { replace: true }); + } + } catch (error) { + console.error('Error checking auth:', error); + navigate('/auth/login', { replace: true }); + } finally { + setChecking(false); + } + }; + + checkAuthAndRedirect(); + }, [navigate]); + + if (checking) { + return ( +
+

Checking authentication...

+
+ ); + } + + return null; +} +