v21: PHP端增加Web登录全链路日志+验证状态同步

- check_web_login_confirmations: 返回php_verified字段(查询web_login_verified表供Java判断)
- webLoginRequest: 增加debugLog记录新请求创建
- completeWebLoginRequest: debugLog增加player和wrote_confirmations字段
- checkPendingWebLogins: 增加debugLog记录轮询结果
This commit is contained in:
ypsdf1
2026-06-25 19:36:05 +08:00
parent cd6010bfbb
commit cd86441a7a
+20 -1
View File
@@ -1736,6 +1736,7 @@ function checkWebLoginConfirmations() {
$db = getDB();
$db->exec("CREATE TABLE IF NOT EXISTS web_login_confirmations (player_name TEXT PRIMARY KEY, confirmed_at INTEGER NOT NULL, consumed INTEGER DEFAULT 0)");
$db->exec("CREATE TABLE IF NOT EXISTS web_login_verified (player_name TEXT PRIMARY KEY, verified_at INTEGER NOT NULL)");
// ★ 不使用BEGIN IMMEDIATE(纯读+更新,减少锁冲突)
try {
@@ -1755,6 +1756,22 @@ function checkWebLoginConfirmations() {
$playerNames[] = $row['player_name'];
}
// ★ 为每个玩家查询web_login_verified状态(供Java判断是否信任此确认)
if (!empty($confirmations)) {
$verifiedStmt = $db->prepare("SELECT verified_at FROM web_login_verified WHERE player_name = :player AND verified_at >= :expire");
$verifiedStmt->bindValue(':expire', $expireTime, SQLITE3_INTEGER);
foreach ($confirmations as &$conf) {
$verifiedStmt->bindValue(':player', $conf['player_name'], SQLITE3_TEXT);
$vResult = $verifiedStmt->execute();
$vRow = $vResult->fetchArray(SQLITE3_ASSOC);
$conf['php_verified'] = $vRow ? true : false;
$conf['php_verified_at'] = $vRow ? (int)$vRow['verified_at'] : 0;
}
unset($conf);
}
debugLog("checkWebLoginConfirmations: 轮询", ['count' => count($confirmations), 'players' => $playerNames]);
// 标记为已消费(一次性)
if (!empty($playerNames)) {
$db->exec("UPDATE web_login_confirmations SET consumed = 1 WHERE consumed = 0 AND confirmed_at >= " . $expireTime);
@@ -1897,6 +1914,7 @@ function webLoginRequest() {
$requestId = $db->lastInsertRowID();
$db->exec("COMMIT");
debugLog("webLoginRequest: ✓ 新请求已创建", ['player' => $player, 'request_id' => $requestId, 'pwd_len' => strlen($password)]);
} catch (\Throwable $e) {
try { $db->exec("ROLLBACK"); } catch (\Throwable $e2) {}
@error_log("[webLoginRequest] Transaction failed: " . $e->getMessage());
@@ -2049,6 +2067,7 @@ function checkPendingWebLogins() {
$requests[] = $row;
}
debugLog("checkPendingWebLogins: 轮询", ['count' => count($requests), 'players' => array_column($requests, 'player_name')]);
success($requests);
}
@@ -2124,7 +2143,7 @@ function completeWebLoginRequest() {
}
$db->exec("COMMIT");
debugLog("completeWebLoginRequest: 更新成功", ['request_id' => $requestId, 'status' => $status]);
debugLog("completeWebLoginRequest: ✓ 写入成功", ['request_id' => $requestId, 'player' => $player, 'status' => $status, 'wrote_confirmations' => ($status === 'success')]);
success(['status' => $status], "结果已写入");
} catch (\Throwable $e) {
try { $db->exec("ROLLBACK"); } catch (\Throwable $e2) {}