diff --git a/Dockerfile b/Dockerfile
index 66b681d..20a3c33 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,14 +1,20 @@
-# 基础镜像（根据JDK版本调整）
+# 使用官方镜像源
 FROM eclipse-temurin:17-jdk-alpine
 
 # 设置工作目录
 WORKDIR /team12
 
-# 复制JAR文件到容器
+# 设置时区
+ENV TZ=Asia/Shanghai
+RUN apk add --no-cache tzdata && \
+    cp /usr/share/zoneinfo/$TZ /etc/localtime && \
+    echo $TZ > /etc/timezone
+
+# 复制 JAR 文件到容器
 COPY target/*.jar team12.jar
 
-# 暴露端口（与Spring Boot的server.port一致）
+# 暴露端口
 EXPOSE 8080
 
-# 启动命令（可添加JVM参数）
+# 启动命令
 ENTRYPOINT ["java", "-jar", "team12.jar"]
\ No newline at end of file
diff --git a/src/main/java/com/pt/controller/UserController.java b/src/main/java/com/pt/controller/UserController.java
index f72e7db..3978831 100644
--- a/src/main/java/com/pt/controller/UserController.java
+++ b/src/main/java/com/pt/controller/UserController.java
@@ -20,9 +20,15 @@
     private UserService userService;
 
     @PostMapping("/register")
-    public ResponseEntity<?> registerUser(@RequestParam("username") String username,
-                                          @RequestParam("password") String password,
-                                          @RequestParam("email") String email) {
+    public ResponseEntity<?> registerUser(@RequestBody Map<String, String> request) {
+        String username = request.get("username");
+        String password = request.get("password");
+        String email = request.get("email");
+
+        if (username == null || password == null || email == null) {
+            return ResponseEntity.badRequest().body("Missing required fields");
+        }
+
         User user = userService.findByUsername(username);
         if (user != null) {
             return ResponseEntity.badRequest().body("User already exists");
@@ -37,24 +43,37 @@
             userService.save(newUser);
 
             Map<String, Object> ans = new HashMap<>();
-            ans.put("result", "User registered successfully");
+            ans.put("success", true);
+            ans.put("message", "User registered successfully");
+            ans.put("data", newUser);
 
             return ResponseEntity.ok().body(ans);
         }
     }
 
     @PostMapping("/login")
-    public ResponseEntity<?> loginUser(@RequestParam("username") String username,
-                                       @RequestParam("password") String password) {
+    public ResponseEntity<?> loginUser(@RequestBody Map<String, String> request) {
+        String username = request.get("username");
+        String password = request.get("password");
+
+        if (username == null || password == null) {
+            return ResponseEntity.badRequest().body("Missing username or password");
+        }
 
         User user = userService.findByUsernameAndPassword(username, password);
         Map<String, Object> ans = new HashMap<>();
         if (user != null) {
-            ans.put("result", "Login successful");
-            ans.put("token", JWTUtils.generateToken(username, Constants.UserRole.USER, Constants.DEFAULT_EXPIRE_TIME));
+            String token = JWTUtils.generateToken(username, Constants.UserRole.USER, Constants.DEFAULT_EXPIRE_TIME);
+            ans.put("success", true);
+            ans.put("message", "Login successful");
+            ans.put("data", Map.of(
+                "token", token,
+                "user", user
+            ));
             return ResponseEntity.ok().body(ans);
         } else {
-            ans.put("result", "Invalid username or password");
+            ans.put("success", false);
+            ans.put("message", "Invalid username or password");
             return ResponseEntity.badRequest().body(ans);
         }
     }
