/** * 认证相关 API */ 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; }; // 注册 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; };