diff --git a/internal/dto/user.go b/internal/dto/user.go index bcc7bd0..14592b3 100644 --- a/internal/dto/user.go +++ b/internal/dto/user.go @@ -1,100 +1,100 @@ package dto type UserDto struct { - ID uint `json:"id"` // 用户ID - Username string `json:"username"` // 用户名 - Nickname string `json:"nickname"` - AvatarUrl string `json:"avatar_url"` // 头像URL - Email string `json:"email"` // 邮箱 - Gender string `json:"gender"` - Role string `json:"role"` - Language string `json:"language"` // 语言 + ID uint `json:"id"` // 用户ID + Username string `json:"username"` // 用户名 + Nickname string `json:"nickname"` + AvatarUrl string `json:"avatar_url"` // 头像URL + Email string `json:"email"` // 邮箱 + Gender string `json:"gender"` + Role string `json:"role"` + Language string `json:"language"` // 语言 } type UserOidcConfigDto struct { - Name string `json:"name"` // OIDC配置名称 - DisplayName string `json:"display_name"` // OIDC配置显示名称 - Icon string `json:"icon"` // OIDC配置图标URL - LoginUrl string `json:"login_url"` // OIDC登录URL + Name string `json:"name"` // OIDC配置名称 + DisplayName string `json:"display_name"` // OIDC配置显示名称 + Icon string `json:"icon"` // OIDC配置图标URL + LoginUrl string `json:"login_url"` // OIDC登录URL } type UserLoginReq struct { - Username string `json:"username"` // username or email - Password string `json:"password"` + Username string `json:"username"` // username or email + Password string `json:"password"` } type UserLoginResp struct { - Token string `json:"token"` - RefreshToken string `json:"refresh_token"` - User UserDto `json:"user"` + Token string `json:"token"` + RefreshToken string `json:"refresh_token"` + User UserDto `json:"user"` } type UserRegisterReq struct { - Username string `json:"username"` // 用户名 - Nickname string `json:"nickname"` // 昵称 - Password string `json:"password"` // 密码 - Email string `json:"-" binding:"-"` + Username string `json:"username"` // 用户名 + Nickname string `json:"nickname"` // 昵称 + Password string `json:"password"` // 密码 + Email string `json:"-" binding:"-"` } type UserRegisterResp struct { - Token string `json:"token"` // 访问令牌 - RefreshToken string `json:"refresh_token"` // 刷新令牌 - User UserDto `json:"user"` // 用户信息 + Token string `json:"token"` // 访问令牌 + RefreshToken string `json:"refresh_token"` // 刷新令牌 + User UserDto `json:"user"` // 用户信息 } type VerifyEmailReq struct { - Email string `json:"email"` // 邮箱地址 + Email string `json:"email"` // 邮箱地址 } type VerifyEmailResp struct { - Success bool `json:"success"` // 验证码发送成功与否 + Success bool `json:"success"` // 验证码发送成功与否 } type OidcLoginReq struct { - Name string `json:"name"` // OIDC配置名称 - Code string `json:"code"` // OIDC授权码 - State string `json:"state"` + Name string `json:"name"` // OIDC配置名称 + Code string `json:"code"` // OIDC授权码 + State string `json:"state"` } type OidcLoginResp struct { - Token string `json:"token"` - RefreshToken string `json:"refresh_token"` - User UserDto `json:"user"` + Token string `json:"token"` + RefreshToken string `json:"refresh_token"` + User UserDto `json:"user"` } type ListOidcConfigResp struct { - OidcConfigs []UserOidcConfigDto `json:"oidc_configs"` // OIDC配置列表 + OidcConfigs []UserOidcConfigDto `json:"oidc_configs"` // OIDC配置列表 } type GetUserReq struct { - UserID uint `json:"user_id"` + UserID uint `json:"user_id"` } type GetUserByUsernameReq struct { - Username string `json:"username"` + Username string `json:"username"` } type GetUserResp struct { - User UserDto `json:"user"` // 用户信息 + User UserDto `json:"user"` // 用户信息 } type UpdateUserReq struct { - ID uint `json:"id"` - Username string `json:"username"` - Nickname string `json:"nickname"` - AvatarUrl string `json:"avatar_url"` - Gender string `json:"gender"` + ID uint `json:"id"` + Username string `json:"username"` + Nickname string `json:"nickname"` + AvatarUrl string `json:"avatar_url"` + Gender string `json:"gender"` } type UpdateUserResp struct { - User *UserDto `json:"user"` // 更新后的用户信息 + User *UserDto `json:"user"` // 更新后的用户信息 } type UpdatePasswordReq struct { - OldPassword string `json:"old_password"` - NewPassword string `json:"new_password"` + OldPassword string `json:"old_password"` + NewPassword string `json:"new_password"` } type ResetPasswordReq struct { - Email string `json:"-" binding:"-"` - NewPassword string `json:"new_password"` + Email string `json:"-" binding:"-"` + NewPassword string `json:"new_password"` } diff --git a/web/src/components/auth/common/current-logged.tsx b/web/src/components/auth/common/current-logged.tsx index 2f9914d..87053fb 100644 --- a/web/src/components/auth/common/current-logged.tsx +++ b/web/src/components/auth/common/current-logged.tsx @@ -8,33 +8,49 @@ import { useTranslations } from "next-intl"; 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"); const router = useRouter() const searchParams = useSearchParams() const redirectBack = searchParams.get("redirect_back") || "/" - const { user } = useAuth(); + const { user, logout } = useAuth(); const handleLoggedContinue = () => { router.push(redirectBack); } + + const handleLogOut = () => { + userLogout().then(() => { + logout(); + toast.success(t("logout_success")); + }) + } + if (!user) return null; return ( -