# 后台登录不上 —— 原因与解决办法

> 现象：安装向导显示成功、数据库 8 张表都建好了，但 `avc_accounts` 表里
> 没有管理员账号，后台 `admin.html` 登录失败。

---

## 一、先回答：为什么数据库里没有管理员账号

**这是设计如此，不是安装失败。**

系统里有两套完全独立的账号体系：

| 体系 | 存储位置 | 用途 |
|---|---|---|
| **后台管理员** | 项目根目录 `.env` 文件的 `ADMIN_USER` / `ADMIN_PASS` | 登录 `/admin.html` |
| **C 端用户** | 数据库 `avc_accounts` 表 | 微信登录 / 手机号注册的用户 |

所以 `avc_accounts` 表是 0 行**完全正常** —— 那是 C 端用户表，等有用户在小程序/网页端登录注册后才有数据。

`avc_settings`、`avc_copies` 等表为空也正常，那是业务数据表，安装时只建表不灌初始数据。

---

## 二、为什么登录不上：真正的原因

我在代码里定位到一个**真实 bug**：

`server/lib/admin.js` 原先在**模块加载时**就把账号密码固化成常量：

```js
const ENV_USER = String(process.env.ADMIN_USER || '').trim();  // 服务启动时读一次
const ENV_PASS = String(process.env.ADMIN_PASS || '').trim();
```

而安装向导写入 `.env` 后，只是把新密码注入 `process.env`（`applyEnvToProcess`），
**已经加载完毕的 admin 模块读到的仍是服务启动时生成的随机口令**。

结果就是：**安装成功了，但必须 `pm2 restart` 之后才能用你设的密码登录。**

### 解决办法（立刻可用）—— 重启服务

```bash
pm2 restart avc
```

重启后服务从 `.env` 读取凭据，你安装时填的账号密码就能用了。

---

## 三、确认你的账号密码到底是什么

```bash
cd /www/wwwroot/v.abcxcx.com/auto-video-cut

# 看管理员账号密码（.env 权限 600，root 可读）
grep -E "^ADMIN_USER|^ADMIN_PASS" .env

# 看安装记录里的用户名
cat install.lock
```

三种可能：

**A. `.env` 里有 `ADMIN_USER` 和 `ADMIN_PASS`**
→ 安装成功了。用这组账号密码登录。**先 `pm2 restart avc`**。

**B. `.env` 里没有这两行**
→ 安装向导**没走到最后一步**（中途报错了）。删掉 `install.lock` 重装：

```bash
rm -f install.lock
pm2 restart avc
```

然后重新访问 `https://你的域名/install.html` 走一遍。

**C. 密码是随机生成的**
→ 安装时密码框留空的话，系统会自动生成 12 位随机密码，
**只在安装结果页显示一次**。如果没记下来，按下面第四节重置。

---

## 四、忘了密码：直接重置

不用重装，改 `.env` 两行即可：

```bash
cd /www/wwwroot/v.abcxcx.com/auto-video-cut

# 把密码改成你想要的（示例改成 Admin@2026）
sed -i 's|^ADMIN_PASS=.*|ADMIN_PASS=Admin@2026|' .env

# 确认改成功
grep -E "^ADMIN_USER|^ADMIN_PASS" .env

# 重启生效
pm2 restart avc
```

然后用 `ADMIN_USER` 的用户名 + 新密码登录 `/admin.html`。

> **密码建议**：暂时别用空格和 `#` 号。虽然新版已修复转义问题，
> 但你当前跑的是旧版，含这些字符的密码可能被读错。

---

## 五、彻底修复：升级到 1.1.10

本次交付的 v4 包已修好这个 bug：

| 修复项 | 说明 |
|---|---|
| **免重启登录** | `admin.js` 改为每次登录时实时读取凭据，安装完成即刻可登录，不再需要手动重启 |
| **`.env` 转义** | 密码含空格 / `#` / 引号时不再被截断丢失字符 |

**升级方式**（你当前是 1.1.6～1.1.9，v4 是全量包，可直接升）：

1. 宝塔 → 文件 → 进入 `auto-video-cut/upgrade/incoming/`
2. 上传 `avc-upgrade-20261013-v4.zip` 和 `latest.json`
3. 后台 →「系统升级」→ 检查更新 → 执行升级

或者直接覆盖安装：删掉 `auto-video-cut` 目录 → 上传解压 `avc-install-20261013-v4.zip`
→ `npm install --omit=dev` → `pm2 restart avc`。

> **注意**：升级会替换代码文件，但**不会动你的 `.env` 和数据库**，账号密码不受影响。

---

## 六、快速排查清单

按顺序执行，每步看结果：

```bash
# 1 服务在跑吗
pm2 status

# 2 接口通吗
curl http://127.0.0.1:3000/api/health

# 3 凭据写了吗
grep -E "^ADMIN_USER|^ADMIN_PASS" .env

# 4 安装锁在吗（在 = 安装流程走完了）
cat install.lock

# 5 启动日志里有没有提示临时口令（有 = .env 没读到）
pm2 logs avc --lines 60 | grep -A2 "临时口令"

# 6 重启
pm2 restart avc
```

如果第 5 步能看到「已生成临时口令」的提示，说明 `.env` 没被读到 ——
用提示里的临时密码就能登录，登录后建议立刻去后台改密码，或按第四节重置。
