From 1bc34688a17357ae667a0efe29c476fdb781f2c7 Mon Sep 17 00:00:00 2001 From: tone <3341154833@qq.com> Date: Tue, 13 May 2025 11:58:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E7=99=BB=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tone-page-web/components/nav-user.tsx | 17 ++++++++++++++--- tone-page-web/lib/api/auth/index.ts | 3 ++- tone-page-web/lib/api/auth/logout.ts | 5 +++++ 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 tone-page-web/lib/api/auth/logout.ts diff --git a/tone-page-web/components/nav-user.tsx b/tone-page-web/components/nav-user.tsx index 3135657..c215d46 100644 --- a/tone-page-web/components/nav-user.tsx +++ b/tone-page-web/components/nav-user.tsx @@ -27,10 +27,11 @@ import { useSidebar, } from "@/components/ui/sidebar" import useSWR from "swr" -import { UserApi } from "@/lib/api" +import { authApi, UserApi } from "@/lib/api" import { Skeleton } from "./ui/skeleton" import { toast } from "sonner" import { useRouter } from "next/navigation" +import { ApiError } from "next/dist/server/api-utils" export function NavUser({ }: {}) { const { isMobile } = useSidebar(); @@ -41,7 +42,7 @@ export function NavUser({ }: {}) { () => UserApi.me(), { onError: (error) => { - if (`${error}`.includes('Unauthorized')) { + if (error.statusCode === 401) { localStorage.removeItem('token'); toast.info('登录凭证已失效,请重新登录'); router.replace('/console/login'); @@ -50,6 +51,16 @@ export function NavUser({ }: {}) { } ); + async function logout() { + try { + await authApi.logout(); + localStorage.removeItem('token'); + toast.success('登出成功'); + router.replace('/console/login'); + } catch (error) { + toast.error('登出失败,请稍后再试'); + } + } return ( @@ -124,7 +135,7 @@ export function NavUser({ }: {}) { 修改密码 - + 登出 diff --git a/tone-page-web/lib/api/auth/index.ts b/tone-page-web/lib/api/auth/index.ts index f858723..d9a3fa8 100644 --- a/tone-page-web/lib/api/auth/index.ts +++ b/tone-page-web/lib/api/auth/index.ts @@ -1 +1,2 @@ -export * from './login'; \ No newline at end of file +export * from './login'; +export * from './logout'; \ No newline at end of file diff --git a/tone-page-web/lib/api/auth/logout.ts b/tone-page-web/lib/api/auth/logout.ts new file mode 100644 index 0000000..a660b6e --- /dev/null +++ b/tone-page-web/lib/api/auth/logout.ts @@ -0,0 +1,5 @@ +import fetcher from "../fetcher"; + +export async function logout() { + return fetcher('/api/auth/logout', { method: 'POST' }); +} \ No newline at end of file