feat: add secure passkey login for issue 536

This commit is contained in:
sagitchu
2026-09-30 19:03:03 +08:00
parent c952d2fb3a
commit 1995759dbe
19 changed files with 1144 additions and 5 deletions
+16
View File
@@ -71,6 +71,22 @@ docker compose up -d
3) 如果你想继续使用 SQLite,保留 `DB_TYPE=sqlite`(或不设置 `DB_TYPE`)即可。
#### 通行证密钥登录(可选)
用户先用密码登录,在个人页面输入当前密码绑定通行证密钥。绑定后,登录页可通过设备解锁使用密钥登录;此流程不依赖 Cloudflare Turnstile,原密码登录保持可用。
在面板后端进程的环境中设置可信的、浏览器实际访问的公开源,例如在 Compose 的 `.env` 中添加:
```dotenv
FLVX_WEBAUTHN_ORIGIN=https://panel.example.com
```
该值必须是完整的 HTTPS origin(协议、域名和可选端口),不能带路径、查询参数或尾部 `/`。仅本机开发允许 `http://localhost:3000` 或 `http://127.0.0.1:3000`。在反向代理后部署时填浏览器地址栏中的**前端**公开源,而不是容器内部地址、后端监听地址或代理转发头。API 可以位于另一地址;WebAuthn 验证的是发起操作的前端页面 origin。Compose 模板会将变量传给后端容器;自行部署时需传给 `paneld` 进程。
未设置或设置错误时,通行证密钥接口拒绝新的绑定和登录,登录页与个人页不显示对应入口;密码登录不受影响。域名变化会改变 RP ID,旧域名下绑定的密钥不能用于新域名,需要在迁移前规划重新绑定。仅更改同一域名的端口也需同步更新此 origin。正在进行的密钥挑战只保存在后端内存中,重启后需重新开始;多副本部署需要共享会话方案。
数据库级备份会保留密钥记录。当前面板的 JSON 导出不包含通行证密钥,使用 JSON 导入迁移后,用户需要重新绑定。
#### 从 SQLite 迁移到 PostgreSQL
如果你是通过 `panel_install.sh` 安装面板,推荐直接使用脚本菜单一键迁移: