diff --git a/api.php b/api.php index 032ffe4..697a32d 100644 --- a/api.php +++ b/api.php @@ -13,11 +13,7 @@ function cfg(): array return ny_load_config(); } -// 会话/安装保护:除 auth_check 外,未安装或未登录一律拒访 -if (!ny_is_installed()) { - ny_json(['ok' => false, 'msg' => '系统尚未安装,请先完成安装向导'], 503); - exit; -} +// 会话保护:除 auth_check 外,未登录一律拒访 if ($action !== 'auth_check' && !ny_is_auth()) { ny_json(['ok' => false, 'msg' => '未登录或会话已过期,请重新登录'], 401); exit; @@ -56,7 +52,7 @@ try { $new[$k] = is_string($in[$k]) ? trim((string)$in[$k]) : $in[$k]; } } - // 密码:与 install.php 一致不做 trim(保留首尾空格的原貌),空 / 占位符 = 不修改 + // 密码:保留首尾空格的原貌,空 / 占位符 = 不修改 if (array_key_exists('password', $in)) { $pwdIn = (string)$in['password']; if ($pwdIn !== '' && $pwdIn !== '******') { diff --git a/bootstrap.php b/bootstrap.php index 7bc030f..52d286f 100644 --- a/bootstrap.php +++ b/bootstrap.php @@ -80,17 +80,13 @@ function ny_logout(): void session_destroy(); } -/** 判断是否已安装(有过连接配置且能流转):文件 config 或 DB settings 存在 base_url 且账号非空 */ +/** 判断是否已安装(只看文件 config:base_url 非空即视为已具备连接配置) */ function ny_is_installed(): bool { $cfg = ny_load_config(); if (trim((string)($cfg['base_url'] ?? '')) === '') { return false; } - // 有无可用的后端(文件 config 存在 ,或 DB 连得上) - if (class_exists('Db') && Db::isConnected()) { - return true; - } return is_file(ny_config_file()); } @@ -145,21 +141,7 @@ function ny_load_config(): array { $GLOBALS['__ny_cfg_source'] = 'default'; - // 数据库已初始化且能连上 → 从 DB 读,否则回退文件 - $dbCfg = ny_db_config(); - if ($dbCfg !== null) { - $cfg = ny_default_config(); - foreach ($cfg as $k => $v) { - if (array_key_exists($k, $dbCfg)) { - $cfg[$k] = is_bool($v) ? (bool)$dbCfg[$k] : $dbCfg[$k]; - } - } - $cfg['base_url'] = rtrim(trim((string)$cfg['base_url']), '/'); - $cfg['api_prefix'] = '/' . trim((string)$cfg['api_prefix'], '/'); - $GLOBALS['__ny_cfg_source'] = 'db'; - return $cfg; - } - + // 默认配置 + 文件覆盖(DB 后端本批次已下线,统一走文件存储) $cfg = ny_default_config(); $saved = ny_read_json(ny_config_file(), null); if (is_array($saved)) { @@ -169,15 +151,6 @@ function ny_load_config(): array } } $GLOBALS['__ny_cfg_source'] = 'file'; - // DB 已连上但库里没有配置,而文件里有 —— 迁移一份到 DB,避免两端不一致 - if (class_exists('Db') && Db::pdo() !== null && empty($GLOBALS['__ny_cfg_migrated'])) { - $GLOBALS['__ny_cfg_migrated'] = true; - try { - Db::settingsSet('config', json_encode($cfg, JSON_UNESCAPED_UNICODE)); - } catch (Throwable $e) { - // 迁移失败不影响本次使用 - } - } } $cfg['base_url'] = rtrim(trim((string)$cfg['base_url']), '/'); $cfg['api_prefix'] = '/' . trim((string)$cfg['api_prefix'], '/'); @@ -186,44 +159,8 @@ function ny_load_config(): array function ny_save_config(array $cfg): bool { - // 先写文件快照:DB 万一不可用(连不上 / 未初始化)时不会静默回退到出厂默认配置 - $fileOk = ny_write_json(ny_config_file(), $cfg); - - if (class_exists('Db')) { - $db = Db::pdo(); - if ($db !== null) { - try { - Db::settingsSet('config', json_encode($cfg, JSON_UNESCAPED_UNICODE)); - $GLOBALS['__ny_cfg_source'] = 'db'; - return true; - } catch (Throwable $e) { - // 落库失败则回退文件 - $GLOBALS['__ny_cfg_source'] = 'file'; - return $fileOk; - } - } - } $GLOBALS['__ny_cfg_source'] = 'file'; - return $fileOk; -} - -/** 数据库初始化后从 DB 读取配置(无则返回 null) */ -function ny_db_config(): ?array -{ - if (!class_exists('Db')) { - return null; - } - $db = Db::pdo(); - if ($db === null) { - return null; - } - try { - $raw = (string)(Db::settingsAll()['config'] ?? ''); - } catch (Throwable $e) { - return null; - } - $data = json_decode($raw, true); - return is_array($data) ? $data : null; + return ny_write_json(ny_config_file(), $cfg); } /** 安全的字符串化(避免数组/对象转字符串报错) */ diff --git a/dashboard.php b/dashboard.php index e32de29..a2e733d 100644 --- a/dashboard.php +++ b/dashboard.php @@ -1,11 +1,11 @@ &class=<班级名> 分享与刷新恢复;缺省自动选第一个班级。 + */ declare(strict_types=1); require __DIR__ . '/bootstrap.php'; -if (!ny_is_installed()) { - header('Location: install.php'); - exit; -} if (!ny_is_auth()) { header('Location: login.php'); exit; @@ -16,7 +16,7 @@ if (!ny_is_auth()) {
-