From b00ea71c1b26e0a8d34ed9b002d4550e3cb33eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E8=87=AA=E8=BE=BE?= <980324341@qq.com> Date: Sat, 22 Aug 2026 16:06:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8D=A2=E8=AE=BE=E5=A4=87=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/auth/service/AuthService.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/auth/service/AuthService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/auth/service/AuthService.java index bd252cd5..e6464356 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/auth/service/AuthService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/auth/service/AuthService.java @@ -56,20 +56,19 @@ public class AuthService { stored = deviceId; log.info("[auth] first-login bind userId={} device={}", user.getId(), deviceId); } else if (!stored.equals(deviceId)) { - if (isAdmin) { - log.warn("[auth] device mismatch but admin bypass userId={} stored={} current={}", - user.getId(), stored, deviceId); - } else { - log.warn("[auth] device mismatch reject userId={} stored={} current={}", - user.getId(), stored, deviceId); - throw new BusinessException("当前设备与首次登录设备不一致,请在原设备上登录"); - } + // 设备指纹变化(换电脑/重装/清理注册表)会锁死账号,密码已验证通过, + // 直接重新绑定到当前设备,避免账号被锁、数据因重建账号而丢失。 + loginUserMapper.update(null, new LambdaUpdateWrapper() + .eq(LoginUserEntity::getId, user.getId()) + .set(LoginUserEntity::getMachine, deviceId)); + log.warn("[auth] device rebound on login userId={} old={} new={}", + user.getId(), stored, deviceId); } else { log.info("[auth] device match userId={} isAdmin={} device={}", user.getId(), isAdmin, deviceId); } - return buildResult(user, stored, isAdmin); + return buildResult(user, deviceId, isAdmin); } public LoginResultVo checkLogin(String token, String currentDeviceId) {