fix (farm): 登录(微信端)

- 刷新LocalThread中的tenantId
This commit is contained in:
达富斌
2025-11-26 19:24:08 +08:00
parent e6cb5601c6
commit d73b86c794
2 changed files with 64 additions and 5 deletions

View File

@@ -164,15 +164,43 @@ public class AuthController {
} }
} }
// @PermitAll
// @PostMapping("/login-by-tenant")
// @Operation(summary = "登录 (切换租户之后调用)")
// public CommonResult<AuthLoginRespVO> getPhoneNumber4Login(@RequestBody @Valid TenantTokenReqVO reqVO) {
// // 强行清楚 本地线程 中的租户ID , 请设置为当前将要登录的租户ID
//// TenantContextHolder.clear();
//// TenantContextHolder.setTenantId(Long.valueOf(reqVO.getTenantId()));
// AuthLoginRespVO login = authService.getPhoneNumber4Login(reqVO);
// if (login != null) {
// return success(login);
// } else {
// return error(405, "该手机号不是平台用户");
// }
// }
@PermitAll @PermitAll
@TenantIgnore
@PostMapping("/login-by-tenant") @PostMapping("/login-by-tenant")
@Operation(summary = "登录 (切换租户之后调用)") @Operation(summary = "登录 (切换租户之后调用)")
public CommonResult<AuthLoginRespVO> getPhoneNumber4Login(@RequestBody @Valid TenantTokenReqVO reqVO) { public CommonResult<AuthLoginRespVO> loginByTenant(@RequestBody @Valid TenantTokenReqVO reqVO) {
// 强行清楚 本地线程 中的租户ID , 请设置为当前将要登录的租户ID // 强行清除本地线程中的租户ID,设置为当前将要登录的租户ID
Long targetTenantId;
try {
targetTenantId = Long.valueOf(reqVO.getTenantId());
} catch (NumberFormatException e) {
log.error("[loginByTenant][租户ID格式错误: {}]", reqVO.getTenantId());
return error(400, "租户ID格式错误");
}
// 清除并设置租户ID,确保后续操作使用正确的租户上下文
// TenantContextHolder.clear(); // TenantContextHolder.clear();
// TenantContextHolder.setTenantId(Long.valueOf(reqVO.getTenantId())); // TenantContextHolder.setTenantId(targetTenantId);
// log.info("[loginByTenant][设置租户ID: {}, 手机号: {}]", targetTenantId, reqVO.getPhoneNumber());
AuthLoginRespVO login = authService.getPhoneNumber4Login(reqVO); AuthLoginRespVO login = authService.getPhoneNumber4Login(reqVO);
if (login != null) { if (login != null) {
log.info("[loginByTenant][登录成功,最终租户ID: {}]", TenantContextHolder.getTenantId());
return success(login); return success(login);
} else { } else {
return error(405, "该手机号不是平台用户"); return error(405, "该手机号不是平台用户");

View File

@@ -451,13 +451,44 @@ public class AdminAuthServiceImpl implements AdminAuthService {
} }
} }
@Override // @Override
// public AuthLoginRespVO getPhoneNumber4Login(TenantTokenReqVO reqVO) {
// String phoneNumber = reqVO.getPhoneNumber();
// AdminUserDO user = userService.getUserByMobileAndTenantId2(phoneNumber,reqVO.getTenantId());
//
// AuthLoginRespVO tokenAfterLoginSuccess = createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_MOBILE);
// tokenAfterLoginSuccess.setMobile(phoneNumber);
// return tokenAfterLoginSuccess;
// }
public AuthLoginRespVO getPhoneNumber4Login(TenantTokenReqVO reqVO) { public AuthLoginRespVO getPhoneNumber4Login(TenantTokenReqVO reqVO) {
String phoneNumber = reqVO.getPhoneNumber(); String phoneNumber = reqVO.getPhoneNumber();
AdminUserDO user = userService.getUserByMobileAndTenantId2(phoneNumber,reqVO.getTenantId()); // 切换租户:强制使用请求中的租户ID,这是用户要切换到的目标租户ID
Long targetTenantId = Long.valueOf(reqVO.getTenantId());
// 清除并设置目标租户ID,确保后续操作使用新的租户上下文
TenantContextHolder.clear();
TenantContextHolder.setTenantId(targetTenantId);
log.info("[getPhoneNumber4Login][切换租户登录,设置目标租户ID: {}, 手机号: {}]", targetTenantId, phoneNumber);
// 根据手机号和目标租户ID查询用户(该租户下的用户账号)
AdminUserDO user = userService.getUserByMobileAndTenantId2(phoneNumber, reqVO.getTenantId());
if (user == null) {
log.warn("[getPhoneNumber4Login][用户不存在,手机号: {}, 目标租户ID: {}]", phoneNumber, targetTenantId);
return null;
}
log.info("[getPhoneNumber4Login][找到用户: {}, 用户所属租户ID: {}, 目标租户ID: {}]",
user.getId(), user.getTenantId(), targetTenantId);
// 再次确保使用目标租户ID(防止在查询过程中被覆盖)
TenantContextHolder.setTenantId(targetTenantId);
log.info("[getPhoneNumber4Login][创建Token前,确认使用目标租户ID: {}]", TenantContextHolder.getTenantId());
// 创建token,确保使用目标租户ID
AuthLoginRespVO tokenAfterLoginSuccess = createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_MOBILE); AuthLoginRespVO tokenAfterLoginSuccess = createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_MOBILE);
tokenAfterLoginSuccess.setMobile(phoneNumber); tokenAfterLoginSuccess.setMobile(phoneNumber);
log.info("[getPhoneNumber4Login][Token创建完成,租户ID: {}]", TenantContextHolder.getTenantId());
return tokenAfterLoginSuccess; return tokenAfterLoginSuccess;
} }