Просмотр исходного кода

feat(wechat): 添加根据 token 获取用户信息接口

- 新增 /user_info POST 接口,支持从 Header 或 JSON body 获取 token
- 实现 token 验证逻辑,返回用户基本信息
- 返回字段包括用户 id、微信 openid、角色、头像、昵称、性别、电话、年龄和地址
- 添加对缺失或无效 token 的错误处理
- 集成 UserInfoMapper 查询用户数据
- 使用 HttpServletRequest 获取请求信息
mcbaiyun 2 месяцев назад
Родитель
Сommit
9a73b65fa9

+ 43 - 0
src/main/java/work/baiyun/chronicdiseaseapp/controller/WeChatController.java

@@ -16,6 +16,8 @@ import work.baiyun.chronicdiseaseapp.service.TokenService;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 
+import jakarta.servlet.http.HttpServletRequest;
+
 import java.util.HashMap;
 import java.util.Map;
 
@@ -79,4 +81,45 @@ public class WeChatController {
         data.put("token", token);
         return R.success(200, "ok", data);
     }
+
+    /**
+     * 根据 token 返回当前用户信息(id, wx_openid, role, avatar, nickname, sex, phone, age, address)
+     * token 可从 Header("token") 或 POST JSON body 的 { "token": "..." } 中获取。
+     */
+    @PostMapping(path = "/user_info", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+    public R<?> getUserInfo(@RequestBody(required = false) Map<String, String> body, HttpServletRequest request) {
+        String token = null;
+        if (request.getHeader("token") != null && !request.getHeader("token").isEmpty()) {
+            token = request.getHeader("token");
+        } else if (body != null && body.get("token") != null && !body.get("token").isEmpty()) {
+            token = body.get("token");
+        }
+
+        if (token == null || token.isEmpty()) {
+            return R.fail(401, "Missing token");
+        }
+
+        Long userId = tokenService.validateToken(token);
+        if (userId == null) {
+            return R.fail(401, "Invalid or expired token");
+        }
+
+        UserInfo ui = userInfoMapper.selectById(userId);
+        if (ui == null) {
+            return R.fail(404, "User not found");
+        }
+
+        Map<String, Object> out = new HashMap<>();
+        out.put("id", ui.getId());
+        out.put("wx_openid", ui.getWx_openid());
+        out.put("role", ui.getRole() != null ? ui.getRole().getCode() : null);
+        out.put("avatar", ui.getAvatar());
+        out.put("nickname", ui.getNickname());
+        out.put("sex", ui.getSex());
+        out.put("phone", ui.getPhone());
+        out.put("age", ui.getAge());
+        out.put("address", ui.getAddress());
+
+        return R.success(200, "ok", out);
+    }
 }