|
|
@@ -64,13 +64,13 @@ public class WeChatController {
|
|
|
|
|
|
// 查找是否存在 role + wx_openid 的用户
|
|
|
QueryWrapper<UserInfo> qw = new QueryWrapper<>();
|
|
|
- qw.eq("role", pg.getCode()).eq("wx_openid", openid);
|
|
|
+ qw.eq("role", pg.getCode()).eq("wx_openid", openid);
|
|
|
UserInfo ui = userInfoMapper.selectOne(qw);
|
|
|
if (ui == null) {
|
|
|
// create new user info with provided role and openid
|
|
|
ui = new UserInfo();
|
|
|
ui.setRole(pg);
|
|
|
- ui.setWx_openid(openid);
|
|
|
+ ui.setWxOpenid(openid);
|
|
|
userInfoMapper.insert(ui);
|
|
|
}
|
|
|
|
|
|
@@ -83,25 +83,45 @@ public class WeChatController {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 根据 token 返回当前用户信息(id, wx_openid, role, avatar, nickname, sex, phone, age, address)
|
|
|
- * token 可从 Header("token") 或 POST JSON body 的 { "token": "..." } 中获取。
|
|
|
+ * 根据 token 返回当前用户信息(id, wx_openid, role, avatar, nickname, sex, phone, age, address)。
|
|
|
+ *
|
|
|
+ * 推荐(首选):通过标准 Authorization header 传递 token:
|
|
|
+ * Authorization: Bearer <token>
|
|
|
+ *
|
|
|
+ * 向后兼容:如果没有 Authorization header,仍然支持 X-Token 或 token header,或 POST 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");
|
|
|
+ // 优先使用拦截器放入的 currentUserId(AuthInterceptor 已验证 X-Token)
|
|
|
+ Object attr = request.getAttribute("currentUserId");
|
|
|
+ Long userId = null;
|
|
|
+ if (attr instanceof Long) {
|
|
|
+ userId = (Long) attr;
|
|
|
+ } else if (attr instanceof Integer) {
|
|
|
+ // 有时框架可能将数字解析为 Integer
|
|
|
+ userId = ((Integer) attr).longValue();
|
|
|
}
|
|
|
|
|
|
- if (token == null || token.isEmpty()) {
|
|
|
- return R.fail(401, "Missing token");
|
|
|
- }
|
|
|
-
|
|
|
- Long userId = tokenService.validateToken(token);
|
|
|
+ // 如果拦截器没有提供 userId,则回退到兼容旧接口的 token (header: token 或 body.token)
|
|
|
if (userId == null) {
|
|
|
- return R.fail(401, "Invalid or expired token");
|
|
|
+ String token = null;
|
|
|
+ // 兼容拦截器使用的 X-Token header,如果外部直接调用也允许使用 token header 或 body
|
|
|
+ if (request.getHeader("X-Token") != null && !request.getHeader("X-Token").isEmpty()) {
|
|
|
+ token = request.getHeader("X-Token");
|
|
|
+ } else 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");
|
|
|
+ }
|
|
|
+
|
|
|
+ userId = tokenService.validateToken(token);
|
|
|
+ if (userId == null) {
|
|
|
+ return R.fail(401, "Invalid or expired token");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
UserInfo ui = userInfoMapper.selectById(userId);
|
|
|
@@ -111,7 +131,7 @@ public class WeChatController {
|
|
|
|
|
|
Map<String, Object> out = new HashMap<>();
|
|
|
out.put("id", ui.getId());
|
|
|
- out.put("wx_openid", ui.getWx_openid());
|
|
|
+ out.put("wx_openid", ui.getWxOpenid());
|
|
|
out.put("role", ui.getRole() != null ? ui.getRole().getCode() : null);
|
|
|
out.put("avatar", ui.getAvatar());
|
|
|
out.put("nickname", ui.getNickname());
|