diff --git a/frontend/src/Route.tsx b/frontend/src/Route.tsx index 3639f45..7538ba1 100644 --- a/frontend/src/Route.tsx +++ b/frontend/src/Route.tsx @@ -57,7 +57,7 @@ export function PageRoute() { function NeedLogin({ children, needAdmin = false }: { children: JSX.Element, needAdmin?: boolean }) { const t = useAtomValue(token) const navigate = useNavigate(); - const { data, loading } = useRequest(() => userInfo(t), { + useRequest(() => userInfo(t), { refreshDeps: [t], cacheKey: "/api/v1/user" + t, staleTime: 60000, @@ -67,12 +67,21 @@ function NeedLogin({ children, needAdmin = false }: { children: JSX.Element, nee } console.warn(e) }, + onSuccess: u => { + if (!u) return + if (!u.is_admin && needAdmin) { + navigate("/login") + } + if (u.uuid == "") { + navigate("/login") + } + } }) - if (t == "") { - return - } - if (!loading && data && needAdmin && !data.is_admin) { + + if (!localStorage.getItem("token") || localStorage.getItem("token") == '""') { return } + + return <> {children} } \ No newline at end of file diff --git a/frontend/src/views/Layout.tsx b/frontend/src/views/Layout.tsx index 47250ea..37e3ce7 100644 --- a/frontend/src/views/Layout.tsx +++ b/frontend/src/views/Layout.tsx @@ -90,7 +90,7 @@ const MyToolbar = memo(function MyToolbar() { const [nowUser, setNowUser] = useAtom(user) const [anchorEl, setAnchorEl] = React.useState(null); const navigate = useNavigate(); - const [, setToken] = useAtom(token) + const setToken = useSetAtom(token) const setErr = useSetAtom(LayoutAlertErr) const setOpen = useSetAtom(DrawerOpen)