diff --git a/tone-page-web/app/console/(with-menu)/layout.tsx b/tone-page-web/app/console/(with-menu)/layout.tsx index f2430b2..8774155 100644 --- a/tone-page-web/app/console/(with-menu)/layout.tsx +++ b/tone-page-web/app/console/(with-menu)/layout.tsx @@ -12,38 +12,26 @@ import { SidebarProvider, SidebarTrigger, } from "@/components/ui/sidebar" +import { useUserMe } from "@/hooks/user/use-user-me"; import { UserApi } from "@/lib/api"; import { useRouter } from "next/navigation"; -import { useEffect, useLayoutEffect } from "react"; import { toast } from "sonner"; -import useSWR from "swr"; export default function ConsoleMenuLayout({ children, }: { children: React.ReactNode }) { - const isClientSide = typeof window !== 'undefined'; const router = useRouter(); - const { data: user, isLoading, error, mutate } = useSWR( - '/api/user/me', - async () => UserApi.me(), - { - onError: (error) => { - if (error.statusCode === 401) { - if (isClientSide) { - localStorage.removeItem('token'); - } - toast.info('登录凭证已失效,请重新登录'); - router.replace('/console/login'); - } - }, - revalidateIfStale: false, - revalidateOnFocus: false, - revalidateOnReconnect: false, + const { user, isLoading, error } = useUserMe({ + onError: (e) => { + if (e.statusCode === 401) { + toast.info('登录凭证已失效,请重新登录'); + router.replace('/console/login'); + } } - ); + }); if (!isLoading && !error && !user) { router.replace('/console/login'); diff --git a/tone-page-web/hooks/user/use-user-me.ts b/tone-page-web/hooks/user/use-user-me.ts new file mode 100644 index 0000000..e7290da --- /dev/null +++ b/tone-page-web/hooks/user/use-user-me.ts @@ -0,0 +1,30 @@ +import { UserApi } from "@/lib/api"; +import useSWR from "swr"; + +export function useUserMe({ onError }: { onError?: (e: any) => void } = {}) { + const isClientSide = typeof window !== 'undefined'; + + const { data: user, isLoading, error } = useSWR( + '/api/user/me', + async () => UserApi.me(), + { + onError: (error) => { + if (error.statusCode === 401) { + if (isClientSide) { + localStorage.removeItem('token'); + } + } + + onError?.(error); + }, + revalidateIfStale: false, + revalidateOnFocus: false, + } + ); + + return { + user, + isLoading, + error + } +} \ No newline at end of file