From fd154c67eac09a642fb0d5481f887872727a3c91 Mon Sep 17 00:00:00 2001 From: Snowykami Date: Tue, 23 Sep 2025 18:53:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=99=BB=E5=87=BA=E9=80=BB=E8=BE=91=EF=BC=8C=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84=20API=20=E8=B0=83=E7=94=A8?= =?UTF-8?q?=EF=BC=9B=E6=9B=B4=E6=96=B0=E4=B8=AD=E6=96=87=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E4=BB=A5=E6=8F=90=E5=8D=87=E7=94=A8=E6=88=B7=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/auth/common/current-logged.tsx | 5 ----- web/src/components/auth/login/login-form.tsx | 7 +++---- web/src/components/auth/register/register-form.tsx | 9 +++++++++ web/src/components/console/nav-user.tsx | 9 ++------- .../layout/nav/avatar-with-dropdown-menu.tsx | 11 +++-------- web/src/contexts/auth-context.tsx | 13 ++++++++++--- web/src/locales/zh-CN.json | 3 +++ 7 files changed, 30 insertions(+), 27 deletions(-) diff --git a/web/src/components/auth/common/current-logged.tsx b/web/src/components/auth/common/current-logged.tsx index 87053fb..59bd3c3 100644 --- a/web/src/components/auth/common/current-logged.tsx +++ b/web/src/components/auth/common/current-logged.tsx @@ -9,8 +9,6 @@ import { useRouter, useSearchParams } from "next/navigation"; import React from "react"; import { SectionDivider } from '@/components/common/section-divider'; import { LogOut } from "lucide-react"; -import { userLogout } from "@/api/user"; -import { toast } from "sonner"; export function CurrentLogged() { const t = useTranslations("Login"); @@ -24,10 +22,7 @@ export function CurrentLogged() { } const handleLogOut = () => { - userLogout().then(() => { logout(); - toast.success(t("logout_success")); - }) } if (!user) return null; diff --git a/web/src/components/auth/login/login-form.tsx b/web/src/components/auth/login/login-form.tsx index 9baff91..f901944 100644 --- a/web/src/components/auth/login/login-form.tsx +++ b/web/src/components/auth/login/login-form.tsx @@ -11,10 +11,9 @@ import { } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" -import Image from "next/image" import { useEffect, useState } from "react" import type { OidcConfig } from "@/models/oidc-config" -import { getCaptchaConfig, listOidcConfigs, userLogin, userLogout } from "@/api/user" +import { getCaptchaConfig, listOidcConfigs, userLogin} from "@/api/user" import Link from "next/link" import { useRouter, useSearchParams } from "next/navigation" import { useTranslations } from "next-intl" @@ -205,12 +204,12 @@ function LoginWithOidc({ displayName = "Login with OIDC", icon = "/oidc-icon.svg", }: LoginWithOidcProps) { - const { user } = useAuth(); + const { user, logout } = useAuth(); const router = useRouter(); const handleOidcLogin = async () => { // 使用第三方登录时,如果当前已经有登录用户了,则先登出当前用户,避免后端直接使用登录态进行绑定(接口是这样设计的) if (user) { - await userLogout() + logout() } router.push(loginUrl); } diff --git a/web/src/components/auth/register/register-form.tsx b/web/src/components/auth/register/register-form.tsx index fc7a81f..f5f8773 100644 --- a/web/src/components/auth/register/register-form.tsx +++ b/web/src/components/auth/register/register-form.tsx @@ -22,6 +22,8 @@ import { SectionDivider } from "@/components/common/section-divider" import { InputOTPControlled } from "@/components/common/input-otp" import { BaseErrorResponse } from "@/models/resp" import { useAuth } from "@/contexts/auth-context" +import Link from "next/link" +import { loginPath } from "@/hooks/use-route" export function RegisterForm({ className, @@ -181,6 +183,13 @@ export function RegisterForm({ > {isLogging ? t("registering") : t("register")} + {/* 注册链接 */} +
+ {t("already_have_account")}{" "} + + {commonT("login")} + +
diff --git a/web/src/components/console/nav-user.tsx b/web/src/components/console/nav-user.tsx index e50b4fd..8baeb34 100644 --- a/web/src/components/console/nav-user.tsx +++ b/web/src/components/console/nav-user.tsx @@ -32,18 +32,13 @@ import { import { getGravatarFromUser } from "@/utils/common/gravatar" import { formatDisplayName, getFallbackAvatarFromUsername } from "@/utils/common/username" import { useAuth } from "@/contexts/auth-context" -import { userLogout } from "@/api/user" -import { toast } from "sonner" export function NavUser() { const { isMobile } = useSidebar() - const { user } = useAuth(); + const { user, logout } = useAuth(); const handleLogout = () => { - userLogout().then(() => { - toast.success("Logged out successfully"); - window.location.reload(); - }) + logout() } if (!user) return null diff --git a/web/src/components/layout/nav/avatar-with-dropdown-menu.tsx b/web/src/components/layout/nav/avatar-with-dropdown-menu.tsx index ae13bce..c24b226 100644 --- a/web/src/components/layout/nav/avatar-with-dropdown-menu.tsx +++ b/web/src/components/layout/nav/avatar-with-dropdown-menu.tsx @@ -8,9 +8,7 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" -import { userLogout } from "@/api/user"; import Link from "next/link"; -import { toast } from "sonner"; import { useToLogin } from "@/hooks/use-route"; import { CircleUser } from "lucide-react"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; @@ -19,19 +17,16 @@ import { formatDisplayName, getFallbackAvatarFromUsername } from "@/utils/common import { useAuth } from "@/contexts/auth-context"; export function AvatarWithDropdownMenu() { - const { user } = useAuth(); + const { user, logout } = useAuth(); const toLogin = useToLogin(); const handleLogout = () => { - userLogout().then(() => { - toast.success("Logged out successfully"); - window.location.reload(); - }) + logout() } return ( - +