private route

This commit is contained in:
sam 2025-02-26 18:00:01 +08:00
parent c3001d8b8f
commit 2261af9848
2 changed files with 35 additions and 1 deletions

View File

@ -1,3 +1,5 @@
"use client";
import ContentAnimation from '@/components/layouts/content-animation';
import Footer from '@/components/layouts/footer';
import Header from '@/components/layouts/header';
@ -7,8 +9,11 @@ import ScrollToTop from '@/components/layouts/scroll-to-top';
import Setting from '@/components/layouts/setting';
import Sidebar from '@/components/layouts/sidebar';
import Portals from '@/components/portals';
import withAuth from '@/hoc/withAuth';
import { FC } from 'react';
const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => {
export default function DefaultLayout({ children }: { children: React.ReactNode }) {
return (
<>
{/* BEGIN MAIN CONTAINER */}
@ -39,3 +44,5 @@ export default function DefaultLayout({ children }: { children: React.ReactNode
</>
);
}
export default withAuth(DefaultLayout);

27
hoc/withAuth.tsx Normal file
View File

@ -0,0 +1,27 @@
import { useEffect, useState } from "react";
import { useRouter } from "next/navigation";
const withAuth = (WrappedComponent: React.FC) => {
return (props: any) => {
const [isAuthenticated, setIsAuthenticated] = useState(false)
const router = useRouter()
useEffect(() => {
const token = localStorage.getItem("token")
if (!token) {
router.replace("/login") // Redirect to login if no token
} else {
setIsAuthenticated(true)
}
}, [])
if (!isAuthenticated) {
return null // Avoid rendering until auth check is done
}
return <WrappedComponent {...props} />
};
};
export default withAuth