第57批续20: syncOnlinePlayers 改推全量在线玩家(不再筛loggedIn)——修刚注册未/login玩家PHP判'未在线'
Check Source / check (push) Successful in 5s
Auto Release / build (push) Successful in 2m29s
Simple Test / test (push) Successful in 2s
Test Env / test (push) Successful in 1s

根因: syncOnlinePlayers 此前只推 loggedIn 玩家, 刚注册未 /login 的玩家
在 loggedIn 集合里但漏推 → PHP online_players 表无该玩家记录 →
validateWebAccess 判 !isOnline → 网页弹'未在线, 无法批准'。
修复: 删除 if(!loggedInPlayers.contains(...)) continue 过滤,
推送 Bukkit.getOnlinePlayers() 全量在线玩家(已登录+未登录)。
loggedIn 集合保留仅用于日志变化检测。
能否绕过密码验证仍由 login_verified 位决定(续19-hotfix已纠偏),
'在线'与'已验证'两语义彻底解耦。
This commit is contained in:
youpaishidifu
2026-10-27 15:17:27 +08:00
parent 49d86c9e85
commit a44bc88bd0
+5 -3
View File
@@ -8654,11 +8654,13 @@ public class WebManager {
} }
try { try {
java.util.Collection<? extends Player> onlinePlayers = Bukkit.getOnlinePlayers(); java.util.Collection<? extends Player> onlinePlayers = Bukkit.getOnlinePlayers();
java.util.Set<String> loggedInPlayers = plugin.getLoggedIn(); // ★ 只推送已登录的玩家 java.util.Set<String> loggedInPlayers = plugin.getLoggedIn(); // ★ 仅用于日志变化检测
// ★ 第57批续20: 推送全部在线玩家(已登录+未登录), 不再筛 loggedIn。
// 根因: 刚注册未 /login 的玩家在 loggedIn 里但不在 online_players 表里,
// PHP validateWebAccess 判 !isOnline → 弹"未在线"。
// 修复后: 在线=PHP online_players 有记录, 能否绕过密码=login_verified 位(续19-hotfix), 两者解耦。
List<Map<String, Object>> playersData = new ArrayList<>(); List<Map<String, Object>> playersData = new ArrayList<>();
for (Player p : onlinePlayers) { for (Player p : onlinePlayers) {
// ★ 关键:只有真正输入密码登录的玩家才推送到PHP
if (!loggedInPlayers.contains(p.getName())) continue;
Map<String, Object> playerInfo = new LinkedHashMap<>(); Map<String, Object> playerInfo = new LinkedHashMap<>();
playerInfo.put("name", p.getName()); playerInfo.put("name", p.getName());
playerInfo.put("login_time", System.currentTimeMillis() / 1000); playerInfo.put("login_time", System.currentTimeMillis() / 1000);