Skip to content
wuzf edited this page Oct 19, 2026 · 7 revisions

常见问题与故障排查

先确认自己正在访问的实例地址、页面显示的版本和最近一次部署结果。处理数据问题前,尽可能先导出当前可读取的账户;不要先删除 Worker、KV 或加密密钥。

项目定位

和 Google Authenticator 有什么区别?

它同样可以生成验证器验证码,但账户由你部署的 Cloudflare Worker 管理,可从网页、PWA 和浏览器扩展访问。你需要自己负责部署账户、管理密码、加密主密钥和备份。浏览器扩展需要连接自己的 2FA 实例。

能管理多个用户、短信验证码或 Steam Guard 吗?

当前是一个实例共用管理密码,没有多用户账户隔离或团队权限。项目生成 TOTP / HOTP,不接收短信或邮件;当前没有 Steam Guard 专用验证码实现。扩展仅支持 TOTP。

免费部署是否意味着完全没有费用?

项目可使用 Cloudflare 免费计划;实际资源配额、超额策略以 Cloudflare 当前规则为准。自己的域名、远程存储和网盘订阅可能另有费用。请查看自己账户的用量,Wiki 不承诺无限免费。

部署与升级

首次打开出现“服务未配置”、Unknown binding 或 Error 1101

先检查 Worker 的 Settings → Bindings 中是否有准确命名的 SECRETS_KV,并核对它是否指向本实例的数据。标准部署还应有 SECRETS_STORE Durable Object 绑定。查看该次部署日志或运行 npx wrangler tail 获取具体异常,不能只凭 Error 1101 判断原因。

手动配置部署见部署指南;不要把本地开发环境误连到生产 KV。

为什么有两个 KV 命名空间,应该保留哪个?

一键部署表单可能创建一个未绑定的 KV(默认名称 2fa),实际部署使用 Wrangler 创建的 <Worker 名称>-secrets-kv。以 Worker 当前绑定和数据为准,不能仅凭名称判断。确认绑定及备份前不要删除任何命名空间。

Actions 里没有 Sync Upstream

一键部署导入仓库时不会复制 .github/workflows。按升级与回滚添加项目提供的短工作流入口,然后运行 Actions → Sync Upstream → Run workflow。

同步成功但网页版本没变

依次检查:GitHub 仓库是否已更新、Cloudflare 是否成功部署该提交、访问的域名是否指向正确 Worker。确认服务端版本更新后再刷新网页。Git 构建的部署命令使用 npm run deploy,让 Service Worker 版本随部署更新。旧同步流程、权限报错和配置合并问题见升级与回滚。

提示“无法确认本次修改是否已保存,请刷新后重试”

这表示修改未能可靠地通过 SecretsStore 完成,API 返回 503。联网刷新并核对账户实际状态,再决定是否重试;同时检查 Worker / Durable Object 日志、绑定和本次迁移结果。不要把该提示当作“肯定没保存”后反复提交同一操作。

能直接回滚到 1.11.0 之前吗?

不能通过 Dashboard 跨越 Durable Object 类变更直接回滚。需要按升级与回滚使用 CLI 和追加迁移;回到 1.8.0 之前且使用 HOTP 时,还需预先压实计数器。切换前后各约一分钟暂停账户修改与 HOTP 复制。

登录与数据

忘记管理密码怎么办?

只有拥有该 Cloudflare 部署管理权限的人可以重置:在 Worker 实际绑定的 KV 中,仅删除 user_password 键,然后重新访问实例完成首次设置。该操作会使原登录令牌失效,但不会删除账户密钥。

重置期间应控制实例的访问范围,并立即完成新密码设置,避免其他人抢先设置。不要删除 secrets、备份、HOTP 计数器或整个命名空间。若自己没有 Cloudflare 管理权限,请联系实例所有者。

设置 ACCESS_TOKEN 后为什么还是不能登录?

认证实现不读取 ACCESS_TOKEN。网页使用首次设置的管理密码;API 使用登录后签发的 JWT。固定环境变量不能代替登录令牌,见配置参考和 API 参考。

修改密码会重新加密账户吗?

不会。管理密码用于登录认证,ENCRYPTION_KEY 用于服务端数据加解密。修改管理密码会更换签发 JWT 的密码哈希,使旧会话失效;它不能恢复或替代丢失的加密主密钥。

加密密钥丢失,或换了新值后数据打不开

先从密码管理器、离线记录或自己的部署配置备份中找回原始 ENCRYPTION_KEY,并恢复相同值。Cloudflare 不能重新显示已保存的 Secret。重新生成一个密钥无法解密旧数据;管理密码也无法补救。

如果确实找不到原值,只能使用仍能读取的可信设备导出、以前保存的明文导出或网站恢复渠道重新建立账户。不要反复改动线上主密钥或把无法读取的旧数据覆盖掉。详见安全与隐私。

恢复备份后新添加的账户不见了

“还原配置”执行全量替换,不会将备份合并进当前列表,而且恢复前不会自动创建一份保护快照。需要合并时使用批量导入;恢复前应主动导出当前列表。详见备份与恢复。

页面提示有无法显示的账户

部分导入或恢复记录可能含当前网页不支持的 OTP 参数。页面会在列表上方给出提示,可展开查看名称、账户及原因。普通批量导出不包含这些隐藏记录,应先保留来源文件,或核对服务器备份是否完整包含它们;无效条目导致备份不完整时,备份导出也可能被阻止。不要为了消除提示而直接删除仍在使用的账户。

验证码与离线使用

验证码一直不正确

  1. 确认服务和账户选对,密钥来自该账户当前启用的验证器设置。
  2. 核对 TOTP / HOTP 类型、位数、算法和周期;不要凭名称相同就覆盖参数。1.12.0 之前扫码或图片识别添加的普通 otpauth://hotp/ 账户会被误存为 TOTP;这类账户请编辑后改为 HOTP 并核对计数器,或删除后重新扫码,见添加账户。
  3. TOTP 检查设备日期和时间,开启系统自动校时并联网刷新。网页会在后台通过 /api/time 校准时钟,主页已移除校时提示和“重新校时”按钮;恢复联网、回到页面及定时校准仍会自动进行。离线时仍依赖设备及已有校时信息。
  4. 临近到期时等待下一周期;“下一个验证码”需要在下一周期使用。
  5. HOTP 检查计数器是否与网站同步。反复复制可能推进计数器,应按目标网站的恢复/重同步流程处理,不要盲目递增。

为什么切换显示方式后,刷新又变回去了?

检查“设置 → 偏好设置 → 默认显示方式”。固定为“智能聚合”或“全部平铺”时,主页“显示与排序”菜单只作临时切换,刷新或重新打开会回到固定方式。改为“记住上次选择”可沿用当前视图。设置立即生效,只保存在当前浏览器;缓存账户的首屏也会应用保存的视图和排序。

关闭系统设置时提示“保存结果尚未确认”

v1.13.1 起,点击外部、按 Esc、点击关闭或完成都会先等待设置的自动保存,最多等待 5 秒。等待期间再次修改偏好时,会一并等待最新修改;超过等待时间仍未完成,会显示该提示,避免弹窗一直无法退出。

选择“继续编辑”会保留当前输入;选择“关闭”会丢弃其他未保存内容,但不会撤销已经提交的保存请求,这些请求之后仍可能完成。重新打开设置并检查实际值,再决定是否修改。普通的未保存确认及多层弹窗规则见关闭弹窗与未保存内容。

为什么离线能取 TOTP,却不能复制推进 HOTP?

TOTP 可使用本机缓存密钥和时间计算;HOTP 需要与服务端协调计数器,避免不同设备复用或覆盖计数值。网页不会离线推进 HOTP,扩展也不支持 HOTP。详见 PWA。

离线添加的账户没有出现在其他设备

离线更改仍在当前设备的待同步队列中。保持该设备的数据,恢复网络并登录,查看同步结果。401 会暂停等待登录;单条新增或编辑的不可重试错误需要按提示编辑重试。普通导出不包含队列中尚未同步的新建或编辑内容,不能代替同步。退出登录会保留队列,但清除站点数据会丢失它;清理或迁移设备前,应先完成同步并确认服务器结果。

离线批量导入还需保留原始文件,并在联网后核对服务器账户。当前队列按批量响应的 HTTP 状态判断成功,HTTP 200 中的逐项失败不会保留为可编辑的队列项;队列清空也不能证明导入完整,见PWA。

PWA 打不开、页面仍旧或清缓存后账户没了

先联网访问原实例地址并确认能登录,再刷新或重新安装 PWA。清除站点数据会清掉本机离线缓存及待同步数据,不能作为没有备份时的首选排错手段。服务端已保存的账户可以重新加载,未同步的本地操作不能靠重新登录恢复。

扩展提示登录过期,或不能自动填充

在同一浏览器中打开设置的实例地址并登录;核对扩展版本、实例地址和网站访问权限。自动填充需要网站授权;协议、主机和端口变化会视为不同网站。多个账户或无法确定验证码输入框时,按提示选择账户或先聚焦输入框。

短信/邮件验证码框、跨域 iframe、关闭的 Shadow DOM、隐私模式及浏览器内部页面有支持限制,详见浏览器扩展。不要用关闭所有站点保护来处理单一页面问题。

备份与远程存储

为什么每天没有新增备份?

定时任务会比较数据哈希,数据无变化时跳过,避免重复快照。默认 0 16 * * * 是 UTC 16:00,即北京时间次日 00:00。再检查 cron 是否配置、保存是否成功、保留数量是否导致旧备份轮换,见备份与恢复。

云盘中 .json / .csv 文件为什么无法直接查看?

配置了 ENCRYPTION_KEY 时,远程备份保存的是加密后的备份内容,扩展名仍跟随所选格式。应下载后在保留原加密密钥的实例中通过“还原配置”预览或恢复,不能按扩展名认定它一定是明文。

WebDAV 本地能连,Worker 返回 520

项目记录过 Cloudflare Workers 访问坚果云 WebDAV 的 520 兼容性问题;本地客户端成功不代表 Worker 发起请求也成功。先检查目标地址、权限及应用专用密码,再使用应用内连接测试。持续出现该问题时,可选其他 WebDAV 服务或 S3/网盘备份。该案例不能推导为所有经过 Cloudflare 的 WebDAV 服务都不可用。

网盘授权失败、过期或没有文件

核对 OAuth 应用配置的回调地址是否与实例的协议和域名完全一致,以及 Worker 中的 Client ID / Secret、云端账号权限、目标目录和启用状态。Google OAuth 测试模式的令牌有效期等限制也会影响长期备份。详细步骤见远程存储配置。

仍无法解决时

在 GitHub Issues 提供主程序/扩展版本、浏览器和系统、部署方式、复现步骤、预期与实际结果,以及脱敏后的错误信息。不要附验证密钥、二维码、完整备份、Cookie、JWT 或云存储凭据。安全漏洞请走私密安全报告。

依据:部署指南、v1.11.0 发布说明、认证实现、存储协调、时钟校准。

Clone this wiki locally