114 lines
2.6 KiB
TypeScript
114 lines
2.6 KiB
TypeScript
/**
|
|
* 认证相关 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<LoginResponse> => {
|
|
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<void> => {
|
|
await apiClient.post('/auth/logout');
|
|
};
|
|
|
|
// 获取当前用户
|
|
export const getCurrentUser = async (): Promise<User> => {
|
|
const response = await apiClient.get<UserResponse>('/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;
|
|
};
|