这是我的
routes.tsx
文件,我只想做的是,如果用户未经身份验证,那么他/她应该无法导航到仪表板和稍后将进入应用程序的其他路线。
如果他通过了身份验证,那么他/她不应该导航到未经身份验证的路线,例如登录、注册、确认 otp,还可能有更多。目前,
isAuthenticated
函数仅在本地存储具有布尔值或不具有令牌时返回。这看起来也不错,但是这段代码中存在一些我面临的问题
期望经过身份验证的路由和反之亦然的路由以及拦截器“axios”有一个简单且最佳的流程,而无需刷新应用程序
import { Suspense } from "react";
import { Navigate, RouteObject } from "react-router-dom";
import { isAuthenticated } from "./auth";
import { Login, Dashboard, Signup, SendOTP } from "../pages";
import { AuthLayout, PrimaryLayout } from "../layouts";
export const routes: RouteObject[] = [
{
path: "/dashboard",
element: (
<Suspense fallback={<div>...LOADING</div>}>
{isAuthenticated() ? (
<PrimaryLayout />
) : (
<Navigate to="/auth/login" replace />
)}
</Suspense>
),
children: [
{
index: true,
element: <Dashboard />,
},
{ path: "*", element: <Navigate to="dashboard" replace /> },
],
},
{
path: "/auth",
element: <AuthLayout />,
children: [
{
index: true,
element: isAuthenticated() ? (
<Navigate to="/dashboard" replace />
) : (
<Navigate to="login" replace />
),
},
{
path: "login",
element: (
<Suspense fallback={<div>...LOADING</div>}>
<Login />
</Suspense>
),
},
{
path: "signup",
element: (
<Suspense fallback={<div>...LOADING</div>}>
<Signup />
</Suspense>
),
},
{
path: "confirm-otp",
element: (
<Suspense fallback={<div>...LOADING</div>}>
<SendOTP />
</Suspense>
),
},
{ path: "*", element: <Navigate to="/auth/login" replace /> },
],
},
{
path: "*",
element: isAuthenticated() ? (
<Navigate to="/dashboard" replace />
) : (
<Navigate to="/auth/login" replace />
),
},
];
有趣的基础知识,感谢分享