prepare("SELECT * FROM password_reset_tokens WHERE token = :token"); $stmt->bindValue(':token', $token, SQLITE3_TEXT); $result = $stmt->execute(); $row = $result->fetchArray(SQLITE3_ASSOC); if (!$row) { die('重置链接无效或已过期'); } if (time() > $row['expire_at']) { die('重置链接已过期,请重新申请'); } $player = $row['player_name']; // 处理表单提交 $message = ''; $error = ''; $success = false; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $newPassword = isset($_POST['password']) ? $_POST['password'] : ''; $confirmPassword = isset($_POST['confirm_password']) ? $_POST['confirm_password'] : ''; if (!$newPassword || strlen($newPassword) < 6) { $error = '密码长度至少6位'; } elseif ($newPassword !== $confirmPassword) { $error = '两次输入的密码不一致'; } else { // 生成新的密码凭证 $saltBytes = random_bytes(16); $salt = base64_encode($saltBytes); $passwordHash = base64_encode(hash('sha256', $saltBytes . $newPassword, true)); // 更新密码凭证 storeWebLoginCredentials($player, $passwordHash, $salt); // ★ 解冻:清除 frozen 标记并通知 Java 解除 Bukkit 原生封禁 $db->exec("UPDATE users SET frozen = 0, freeze_token = '' WHERE player_name = " . SQLite3::escapeString($player)); $now = time(); $unf = $db->prepare("INSERT INTO web_admin_changes (change_type, target_id, target_name, change_data, created_at) VALUES ('unfreeze', 0, :name, '{}', :now)"); $unf->bindValue(':name', $player, SQLITE3_TEXT); $unf->bindValue(':now', $now, SQLITE3_INTEGER); $unf->execute(); // 删除重置token $stmt = $db->prepare("DELETE FROM password_reset_tokens WHERE token = :token"); $stmt->bindValue(':token', $token, SQLITE3_TEXT); $stmt->execute(); $success = true; $message = '密码重置成功!账号已解冻,请在游戏中使用新密码登录'; } } ?> 重置密码 - Sdf1 Minecraft
✅

重置成功

提示:
请在Minecraft游戏中使用新密码重新登录Web端

重置密码

为您的账号设置新密码

玩家
注意:
• 密码重置后,请使用新密码登录Web端
• 此链接30分钟内有效,使用后自动失效
• 如果这不是您的操作,请忽略此邮件