/** * 认证相关 API */ import axios from "axios"; import apiClient from "./client"; // 类型定义 export interface LoginRequest { email: string; password: string; } export interface LoginResponse { access_token: string; refresh_token?: string | null; token_type: string; expires_in: number; user_id: string; email: string; username: string; display_name: string; } export interface RegisterRequest { email: string; password: string; username: string; display_name?: string; } export interface User { id: string; user_id: string; email: string; username: string; display_name: string; is_email_verified: boolean; email_verified: boolean; created_at?: string; } export interface UserResponse { id?: string; user_id?: string; email: string; username: string; display_name: string; is_email_verified?: boolean; email_verified?: boolean; created_at?: string; } export const normalizeUser = (data: UserResponse): User => { const userId = data.id ?? data.user_id ?? ""; const emailVerified = data.is_email_verified ?? data.email_verified ?? false; return { id: userId, user_id: userId, email: data.email, username: data.username, display_name: data.display_name, is_email_verified: emailVerified, email_verified: emailVerified, created_at: data.created_at, }; }; // 登录 export const login = async (data: LoginRequest): Promise => { const response = await apiClient.post("/auth/login", data); return response.data; }; // 刷新 access_token(使用裸 axios 避免拦截器递归) export const refreshAccessToken = async ( refreshToken: string, ): Promise => { const baseURL = apiClient.defaults.baseURL ?? ""; const response = await axios.post(`${baseURL}/auth/refresh`, { refresh_token: refreshToken, }); return response.data; }; // 注册 export const register = async ( data: RegisterRequest, ): Promise<{ message: string }> => { const response = await apiClient.post("/auth/register", data); return response.data; }; // 登出 export const logout = async (): Promise => { await apiClient.post("/auth/logout"); }; // 获取当前用户 export const getCurrentUser = async (): Promise => { const response = await apiClient.get("/auth/me"); return normalizeUser(response.data); }; // 请求密码重置 export const requestPasswordReset = async ( email: string, ): Promise<{ message: string }> => { const response = await apiClient.post("/auth/forgot-password", { email }); return response.data; }; // 重置密码 export const resetPassword = async ( token: string, newPassword: string, ): Promise<{ message: string }> => { const response = await apiClient.post("/auth/reset-password", { token, new_password: newPassword, }); return response.data; }; // 验证邮箱 export const verifyEmail = async ( token: string, ): Promise<{ message: string }> => { const response = await apiClient.post("/auth/verify-email", { token }); return response.data; };