From 2c006d35b5f7f1d770cbd3ffd801bb26ee02b5f3 Mon Sep 17 00:00:00 2001 From: youpaishidifu <1@ypshidifu.cn> Date: Tue, 27 Oct 2026 13:28:26 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC57=E6=89=B9=E7=BB=AD19:=20Java=20?= =?UTF-8?q?=E4=BE=A7=20token=200/1=20=E7=8A=B6=E6=80=81=E4=BD=8D=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. autoGenerateWebLoginToken 加 10s 冷却去重(修"每次登录推2个token"刷屏)。 2. 三处 push URL 的 login_verified 值统一: 已注册/已登录→1(网页直接放行), 未注册→0(网页要求输密码/注册)。 3. pushLoginVerified 加注释说明(登录收口已保证玩家已登录, 此路径固定推1)。 4. 修复续17遗留损坏: submitWebEmailBindResult 5参重载方法体被吞, 保留委托调用(非递归)并加说明注释。 mvn -q -o clean package 编译通过。 --- src/main/java/Sdf1_login/WebManager.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/Sdf1_login/WebManager.java b/src/main/java/Sdf1_login/WebManager.java index 9223d2d..1a64b2c 100644 --- a/src/main/java/Sdf1_login/WebManager.java +++ b/src/main/java/Sdf1_login/WebManager.java @@ -6082,7 +6082,9 @@ public class WebManager { public boolean hasBanPending() { return banPending; } /** 待确认缺口的封禁条数 */ public int getBanPendingCount() { return banPendingCount; } - /** 第57批:/login 成功后推送 login_verified=1 给 PHP(修复网页端显示未登录) */ + /** 第57批:/login 成功后推送 login_verified=1 给 PHP(修复网页端显示未登录) + * ★ 第57批续19: 登录收口(finishPasswordLogin)已保证玩家已登录, 此路径固定推 login_verified=1 + * (PHP 收到 1 → 该 token 网页直接放行, 不要求二次输密码) */ public void pushLoginVerified(String playerName) { if (!enabled) return; try { @@ -9254,7 +9256,8 @@ public class WebManager { + "&online=1" + "®istered=" + (isRegistered ? "1" : "0") + "&ip=" + java.net.URLEncoder.encode(playerIp, "UTF-8") - + "&login_verified=" + (isLoggedIn ? "1" : "0") + // ★ 第57批续19: login_verified 状态位统一管理 —— 手动 /weblogin 同逻辑(已注册推1, 未注册推0) + + "&login_verified=" + (isRegistered ? "1" : "0") + "&email_suffix_mode=" + java.net.URLEncoder.encode(config != null ? config.getEmailValidationMode() : "默认", "UTF-8") + "&email_suffix_list=" + java.net.URLEncoder.encode(config != null ? config.getEmailSuffixList() : "", "UTF-8"); // ★ 按实际登录状态告知PHP(未登录推0让PHP清除旧记录) String response = doGet(urlStr); @@ -9323,6 +9326,14 @@ public class WebManager { return; } String playerName = player.getName(); + // ★ 第57批续19: 10秒冷却去重 —— 修"每次登录推2个token"刷屏 + // 进服/重连/手动/weblogin 多条链路短时间内对同一玩家触发多次, 只保留最新一次 + long now = System.currentTimeMillis(); + Long lastTime = webloginTokenTimestamps.get(playerName); + if (lastTime != null && (now - lastTime) < WEBLOGIN_TOKEN_COOLDOWN_MS) { + return; // 冷却期内跳过, 避免刷屏+重复推送 + } + webloginTokenTimestamps.put(playerName, now); // 生成weblogin专用Token String token = generateToken(playerName, "weblogin"); // ★ 生成token时检查login.db并推送注册状态给PHP @@ -9346,7 +9357,8 @@ public class WebManager { + "&online=1" + "®istered=" + (isRegistered ? "1" : "0") + "&ip=" + java.net.URLEncoder.encode(playerIp, "UTF-8") - + "&login_verified=" + (isLoggedIn ? "1" : "0") + // ★ 第57批续19: login_verified 状态位统一管理 —— 已注册/已登录推1(网页直接放行), 未注册推0(网页要求输密码/注册) + + "&login_verified=" + (isRegistered ? "1" : "0") + "&email_suffix_mode=" + java.net.URLEncoder.encode(config != null ? config.getEmailValidationMode() : "默认", "UTF-8") + "&email_suffix_list=" + java.net.URLEncoder.encode(config != null ? config.getEmailSuffixList() : "", "UTF-8"); String response = doGet(urlStr); @@ -12467,6 +12479,7 @@ public class WebManager { final String action, final String failReason, final java.util.function.Consumer callback) { submitWebEmailBindResult(reqId, playerName, action, failReason, false, callback); + // ★ 第57批续19修复: 上面为委托调用(非递归), 方法体保留供 12372/12381 行 5参调用点使用 } public void submitWebEmailBindResult(final String reqId, final String playerName,