完善邮件验证与密码重置安全流程

This commit is contained in:
Cheng Zhou
2026-06-30 09:44:24 +08:00
parent 6c2bcc59b2
commit b25055775e
27 changed files with 4437 additions and 526 deletions
+38
View File
@@ -7,6 +7,12 @@ import type {
LoginResponse,
LoginKeyResponse,
RegisterRequest,
EmailAvailabilityResponse,
EmailDomainsResponse,
EmailCodeVerifyResponse,
PasswordResetCodeVerifyResponse,
PasswordResetRequest,
PasswordResetTokenRequest,
} from "../types/api";
export const login = (payload: LoginRequest): Promise<AxiosResponse<LoginResponse>> =>
@@ -20,9 +26,41 @@ export const getLoginKey = (): Promise<AxiosResponse<LoginKeyResponse>> =>
export const fetchMe = (): Promise<AxiosResponse<UserMeResponse>> => apiGet<UserMeResponse>("/api/v1/auth/me");
export const fetchEmailDomains = (): Promise<AxiosResponse<EmailDomainsResponse>> =>
apiGet<EmailDomainsResponse>("/api/v1/auth/email-domains");
export const register = (payload: RegisterRequest): Promise<AxiosResponse<{ message: string }>> =>
apiPost("/api/v1/auth/register", payload);
export const checkEmailAvailability = (email: string): Promise<AxiosResponse<EmailAvailabilityResponse>> =>
apiGet<EmailAvailabilityResponse>("/api/v1/auth/register/email-availability", { params: { email } });
export const sendRegisterEmailCode = (email: string): Promise<AxiosResponse<{ message: string }>> =>
apiPost("/api/v1/auth/register/email-code/send", { email });
export const verifyRegisterEmailCode = (email: string, code: string): Promise<AxiosResponse<EmailCodeVerifyResponse>> =>
apiPost<EmailCodeVerifyResponse>("/api/v1/auth/register/email-code/verify", { email, code });
export const sendPasswordResetEmailCode = (email: string): Promise<AxiosResponse<{ message: string }>> =>
apiPost("/api/v1/auth/password-reset/email-code/send", { email });
export const verifyPasswordResetEmailCode = (
email: string,
code: string
): Promise<AxiosResponse<PasswordResetCodeVerifyResponse>> =>
apiPost<PasswordResetCodeVerifyResponse>("/api/v1/auth/password-reset/email-code/verify", { email, code });
export const sendPasswordResetLink = (email: string): Promise<AxiosResponse<{ message: string }>> =>
apiPost("/api/v1/auth/password-reset-link/send", { email });
export const resetPassword = (payload: PasswordResetRequest): Promise<AxiosResponse<{ message: string }>> =>
apiPost("/api/v1/auth/password-reset", payload);
export const resetPasswordWithToken = (
payload: PasswordResetTokenRequest
): Promise<AxiosResponse<{ message: string }>> =>
apiPost("/api/v1/auth/password-reset-link", payload);
export const updateProfile = (payload: {
full_name?: string;
clinical_department?: string;