diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java index bdab9dd..08cd36e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.member.controller.app.user; import cn.hutool.core.util.ObjectUtil; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.member.controller.app.comauth.vo.CreateWechatAuthReqVo; import cn.iocoder.yudao.module.member.service.comauth.ComAuthService; @@ -16,6 +17,8 @@ import cn.iocoder.yudao.module.member.service.level.MemberLevelService; import cn.iocoder.yudao.module.member.service.opentype.OpenTypeService; import cn.iocoder.yudao.module.member.service.user.MemberRecentTagService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; +import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi; +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; @@ -28,8 +31,10 @@ import javax.validation.Valid; import java.util.List; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; +import static cn.iocoder.yudao.module.member.enums.MemberErrorCode.AUTH_LOGIN_USER_DISABLED; @Tag(name = "用户 APP - 用户个人中心") @RestController @@ -50,11 +55,24 @@ public class AppMemberUserController { private ComAuthService comAuthService; @Resource private LocationService locationService; + @Resource + private OAuth2TokenApi oauth2TokenApi; @GetMapping("/get") @Operation(summary = "获得基本信息") public CommonResult getUserInfo() { MemberUserDO user = userService.getUser(getLoginUserId()); + // 禁用后兜底:即使 token 未清干净,拉资料时也强制踢下线 + if (user == null || CommonStatusEnum.isDisable(user.getStatus())) { + if (user != null) { + try { + oauth2TokenApi.removeAccessTokenByUserId(user.getId(), UserTypeEnum.MEMBER.getValue()); + } catch (Exception e) { + log.warn("禁用用户拉资料时清 token 失败, userId={}", user.getId(), e); + } + } + throw exception(AUTH_LOGIN_USER_DISABLED); + } MemberLevelDO level = levelService.getLevel(user.getLevelId()); AppMemberUserInfoRespVO result = MemberUserConvert.INSTANCE.convert(user, level); // 获取用户tag diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index 8682a28..8991983 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -483,12 +483,20 @@ public class MemberUserServiceImpl implements MemberUserService { private void kickMemberLogin(Long userId) { try { oauth2TokenApi.removeAccessTokenByUserId(userId, UserTypeEnum.MEMBER.getValue()); + log.info("已清理会员登录 token, userId={}", userId); } catch (Exception e) { log.warn("踢出会员登录态失败, userId={}", userId, e); throw e; } try { - chatApi.banUser(userId, "账号已被禁用"); + // 确保 IM 侧有该用户,否则 /third/user/ban 会报「用户不存在」导致推送失败 + syncChatUser(userId); + boolean banned = chatApi.banUser(userId, "账号已被禁用"); + if (!banned) { + log.warn("通知聊天服务封禁用户失败(返回 false), userId={}", userId); + } else { + log.info("已通知聊天服务封禁并踢下线, userId={}", userId); + } } catch (Exception e) { log.warn("通知聊天服务封禁用户失败, userId={}", userId, e); }