diff --git a/.dockerignore b/.dockerignore
index 4ab90f9..dd63092 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,11 +1,12 @@
 # 排除构建工具生成的文件
-node_modules/  # Node.js 依赖
-target/        # Maven/Java 构建输出
-dist/          # 前端构建产物
-build/         # 通用构建目录
+node_modules  # Node.js 依赖
+target      # Maven/Java 构建输出
+dist
+build         # 通用构建目录
 
 # 排除临时文件
 *.log          # 日志文件
 *.swp          # Vim 交换文件
-.idea/         # IntelliJ IDEA 配置
-.vscode/       # VS Code 配置
\ No newline at end of file
+.idea         # IntelliJ IDEA 配置
+.vscode       # VS Code 配置
+.idea
\ No newline at end of file
diff --git a/Dokerfile b/Dockerfile
similarity index 72%
rename from Dokerfile
rename to Dockerfile
index c7ea0a4..deb81af 100644
--- a/Dokerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
 # 构建阶段
-FROM FROM docker.1ms.run/node:23-alpine AS builder
+FROM node:23-alpine AS builder
 WORKDIR /src
 
 # 安装 pnpm
@@ -14,8 +14,8 @@
 RUN pnpm build
 
 # 生产环境
-FROM docker.1ms.run/nginx:1.25-alpine
-COPY --from=builder /dist /usr/share/nginx/html
+FROM nginx:1.25-alpine
+COPY --from=builder /src/dist /usr/share/nginx/html
 COPY 50x.html  /usr/share/nginx/html
 COPY nginx.conf /etc/nginx/conf.d/default.conf
 EXPOSE 80
diff --git a/nginx.conf b/nginx.conf
index 51c2b08..45a62ad 100644
--- a/nginx.conf
+++ b/nginx.conf
@@ -23,7 +23,7 @@
     
     # API 请求代理到后端
     location /api/ {
-        proxy_pass http://group1-backend:8080/;  # 后端服务地址
+        proxy_pass http://team1-backend:8080/;  # 后端服务地址
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
diff --git a/src/api/authApi.ts b/src/api/authApi.ts
index b28b04f..3a8eb17 100644
--- a/src/api/authApi.ts
+++ b/src/api/authApi.ts
@@ -1,3 +1,80 @@
+import axios from 'axios';
 
 
+ class authAPI {
+
+    // static getUserById(userId) {
+    //     // 例如 GET http://localhost:8080/123
+    //     return axios.get(`/${userId}`);
+    // }
+
+
+    // static updateUser(userId, data) {
+    //     // 例如 PUT http://localhost:8080/123  Body: { username: 'xxx', ... }
+    //     return axios.put(`/${userId}`, data);
+    // }
+    //
+    //
+    // static deleteUser(userId:string) {
+    //     // 例如 DELETE http://localhost:8080/123
+    //     return axios.delete(`/${userId}`);
+    // }
+
+
+    static sendVerificationCode(email: string) {
+        // Body: { email: 'xxx@yyy.com'}
+        return axios.post('/api/sendVerification', { email });
+    }
+
+
+    static sendResetCode(email: string) {
+        // Body: { email: 'xxx@yyy.com' }
+        return axios.post('/api/sendResetCode', { email });
+    }
+
+    //
+    // static resetPassword({ email, code, newPassword }) {
+    //     // Body: { email, code, newPassword }
+    //     return axios.post('/resetPassword', { email, code, newPassword });
+    // }
+    //
+    //
+    // static register({ username, email, verificationCode, password }) {
+    //     // Body: { username, email, verificationCode, password, identificationNumber? }
+    //     const body = {
+    //         username,
+    //         email,
+    //         verificationCode,
+    //         password,
+    //     };
+    //     return axios.post('/register', body);
+    // }
+    //
+    // /**
+    //  * 刷新 JWT Token（POST /refreshToken）
+    //  * @param {string} oldToken 旧的 JWT（放在 header: token）
+    //  * @returns {Promise<AxiosResponse>}
+    //  */
+    // static refreshToken(oldToken : string) {
+    //     // 因为后端是从 header 中读取旧 token，这里直接把 token 放进 headers
+    //     return axios.post(
+    //         '/refreshToken',
+    //         {}, // 请求体空
+    //         {
+    //             headers: {
+    //                 token: oldToken,
+    //             },
+    //         }
+    //     );
+    // }
+    //
+    //
+    // static login({ email, password } : {email: string, password:string}) {
+    //     // Body: { email, password }
+    //     return axios.post('/login', { email, password });
+    // }
+
+}
+
+export default authAPI;
 
diff --git a/src/api/interceptors.ts b/src/api/interceptors.ts
index 3b31740..f56a8d4 100644
--- a/src/api/interceptors.ts
+++ b/src/api/interceptors.ts
@@ -1,5 +1,4 @@
 import axios from "axios";
-import { useNavigate } from "react-router";
 
 // 为所有auth外请求添加token头
 axios.interceptors.request.use((config) => {
@@ -8,13 +7,11 @@
     config.url = requestUrl.replace("/auth/","/");
   } else {
     const token = localStorage.getItem('token');
-    if (!token) {
-      const navigate = useNavigate();
-      navigate("/login")
-    }
     config.headers['Authorization'] = `Bearer ${token}`;
   }
   return config;
 }, (error) => {
   return error;
-} );
\ No newline at end of file
+} );
+
+export default axios
\ No newline at end of file
diff --git a/src/feature/auth/Register.tsx b/src/feature/auth/Register.tsx
index 197d265..08edc70 100644
--- a/src/feature/auth/Register.tsx
+++ b/src/feature/auth/Register.tsx
@@ -1,7 +1,8 @@
 import { useEffect, useState } from 'react';
 import { LockOutlined, MailOutlined, NumberOutlined, UserOutlined } from '@ant-design/icons';
-import { Button, Checkbox, Form, Input, Space } from 'antd';
+import {Button, Checkbox, Form, Input, Space} from 'antd';
 import { NavLink } from 'react-router';
+import authApi from "../../api/authApi.ts";
 
 interface FormValues {
     name: string;
@@ -25,12 +26,16 @@
     }
 
     const sendVerificationCode = () => {
+        // 如果邮箱校验不通过，则触发表单校验提示，并中断
         if (!isValidEmail(emailValue)) {
-            form.validateFields(['email'])
+            form.validateFields(['email']);
             return;
         }
-        setCountdown(60)
-    }
+
+        // 发起 POST 请求到后端 /sendVerification
+        authApi.sendVerificationCode(emailValue).catch()
+        setCountdown(60);
+    };
 
     // 发送表单倒计时
     useEffect(() => {
diff --git a/src/main.tsx b/src/main.tsx
index e659723..31a6d39 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -11,6 +11,8 @@
 import { ConfigProvider } from 'antd';
 import zhCN from 'antd/locale/zh_CN';
 
+import "./api/interceptors.ts";
+
 import "./main.css"
 ReactDOM.createRoot(document.getElementById('root')!).render(
   <React.StrictMode>
