⚓ 体验版登录修复 · 操作指南

ShipGod AI Free Trial Login Fix · 2026-08-18

一、问题根因(已实测确认)

线上服务器上部署的 auth-api.php 是旧版:只读 GET 参数,不读 POST 请求体。而体验页和登录页全部用 POST JSON 调用接口,于是:

trial.html 开通体验(POST)
→
服务器回 unknown action
→
login.html 点登船(POST)
→
旧代码静默降级本地 → 无任何提示
线上实测结果结论
GET 方式调用 trial/login/register/check全部正常接口本身在跑,账号能落盘
POST JSON / POST 表单调用unknown action旧版不读 POST 体 → 前端全废
login.html / crew-home.html / index.html 等401全站密码门禁挡住真实访客
trial.html / auth-api.php / upload.php已免密之前已加白名单

二、修复包内容(4 个文件,覆盖上传到网站根目录)

文件修复内容不传的后果
auth-api.php支持 POST JSON + GET;存储失败会明确报错体验版登录 100% 失败(本次核心)
login.html服务器返回"密码错误/船名未注册"时正常显示,不再没反应;支持 ?ship= 自动填船名点"登船"无任何反馈
trial.html开通成功后"立即登录"按钮自动带船名体验用户要手输船名
sw.js缓存 v3→v4 强制刷新;trial.html 加入预缓存;auth-api 等接口不再被 Service Worker 缓存老用户一直加载旧登录页

三、宝塔面板:去掉全站门禁(推荐方案)

体验版要对公众开放,工作区几十个页面都在门禁后面,逐个加白名单不现实。推荐:全站公开,只给后台管理页保留密码。

  1. 宝塔面板 → 网站 → shipstrade.com.cn → 设置 → 配置文件
  2. 找到 server 块里的 auth_basic 与 auth_basic_user_file 两行,先复制保存 user_file 的路径,再把这两行删除或加 # 注释
  3. 在 server 块开头(server_name 之后)粘贴安全加固规则(必须放在 PHP 处理 location 之前,否则 PHP 规则会先命中):
# ===== 安全加固(去掉门禁后必加,放在 PHP 处理 location 之前) =====
location = /ship-accounts.json  { deny all; }   # 账号数据(含明文密码)禁止下载
location = /shared-notices.json { deny all; }   # 通告数据禁止直接下载
location ~ ^/uploads/.*\.php$   { deny all; }   # 上传目录禁止执行 PHP(防 webshell)
  1. 在 server 块末尾(最后一个 } 前)粘贴下面内容,路径换成第 2 步复制的实际路径:
# ===== 后台管理页单独加密(其余全站公开) =====
location = /hq-admin.html        { auth_basic "Restricted"; auth_basic_user_file /www/server/panel/vhost/nginx/.htpasswd; }
location = /orders-admin.html    { auth_basic "Restricted"; auth_basic_user_file /www/server/panel/vhost/nginx/.htpasswd; }
location = /site-config-admin.html { auth_basic "Restricted"; auth_basic_user_file /www/server/panel/vhost/nginx/.htpasswd; }
location = /ship-mgmt-dept.html  { auth_basic "Restricted"; auth_basic_user_file /www/server/panel/vhost/nginx/.htpasswd; }
location = /ship-setup.html      { auth_basic "Restricted"; auth_basic_user_file /www/server/panel/vhost/nginx/.htpasswd; }
  1. 保存(宝塔自动校验 nginx 配置,语法错会拒绝保存)→ 网站 → 重启 Nginx
⚠ 若仍想保留全站门禁:也可用 location = /login.html { auth_basic off; } 逐个放行,但工作区 60+ 页面容易漏,访客点进去还是 401,强烈不推荐。
🔒 为什么必须加安全加固:已实测 upload.php 无任何鉴权、可匿名上传文件,若上传目录能执行 PHP 等于把服务器权限交给任何人;ship-accounts.json 存着全部船名+明文密码,门禁去掉后不挡就会泄露;notices-api.php 发布接口无校验,任何人都能发通告。三条加固规则 5 分钟配好,不配等于裸奔。

四、上传后验证(务必用无痕窗口)

⚠ 你自己的浏览器保存过门禁密码,打开页面不会弹 401,测不出真实访客效果。请用 Chrome/Edge 无痕窗口 或手机流量(非 WiFi 缓存)测试。
  1. 无痕打开 https://shipstrade.com.cn/trial.html → 填船名+邮箱 → 开通
  2. 页面显示船名 + 密码 + 有效期 7 天
  3. 点"🔐 立即登录工作区" → 登录页船名自动填好
  4. 输入密码 → 点"⛵ 登船" → 进入工作区(不再 401、不再没反应)
  5. 随便点几个岗位页、文件夹、通知,确认正常
✓ 验证标准:全程无 401 弹窗、无报错,登录失败时能看到"密码错误/船名未注册"等明确提示。

五、收尾事项

事项说明
清理测试账号排查时在服务器 ship-accounts.json 创建了 ZZTEST0818(体验,7 天自动过期)和 ZZTEST4(basic 无到期,建议手动删除这两条)
清理测试文件安全检测时上传了 /uploads/test/sec-check/sg_security_test.txt,请删除整个 /uploads/test/ 目录
老用户缓存上传 sw.js v4 后,老用户下次打开自动更新;手机端如仍异常,清除浏览器数据或重新安装 APK
已有免密配置config-api.php / coze 系列的内联 fastcgi 白名单保持原样,本次不动