Skip to content

v1.11.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 13:16
· 29 commits to main since this release

v1.11.0:多设备同时修改不再丢失数据

同时修改的保护

此前多台设备或多个标签页同时新增、编辑或删除账户时,两次修改可能都提示成功,实际只保存下其中一次;同时推进同一个 HOTP 计数器,也可能拿到相同的验证码。原因是 Workers KV 是最终一致的存储,同时进行的修改会读到同一份旧数据并互相覆盖。

  • 读写账户和 HOTP 计数器的请求现在都交给 Durable Object SecretsStore 依次处理,包括列表、新增、编辑、删除、批量导入、推进计数器、手动备份和恢复备份。
  • 账户数据仍完整保存在 SECRETS_KV 中,SecretsStore 只保留最近一次写入的副本,并把每次写入同步到 KV。
  • 新增的绑定 SECRETS_STORE 使用 SQLite 存储后端,Workers 免费计划可用,由 wrangler.toml 中的迁移在部署时自动创建。
  • 修改无法送达 SecretsStore 时,返回“无法确认本次修改是否已保存,请刷新后重试”,不会悄悄丢失;读取则直接读 KV。
  • 没有这个绑定时(例如把 worker.js 直接粘贴到 Dashboard),应用照常可用,但只有同一个实例收到的请求会依次处理,多台设备同时修改时仍可能丢失其中一次。

网页与部署改进

  • 页面无法显示的账户,例如恢复备份时原样保留、OTP 参数不受支持的条目,现在可以在列表上方的提示中展开,查看名称、账户和原因,并在确认后逐条删除。
  • 开启智能聚合后,如果没有任何服务拥有两个及以上账户,不再只显示一个“其他服务”标题。
  • 每日定时任务会清理不再被任何账户使用的 HOTP 计数器记录。删除账户时,即使计数器记录没有删掉,也不再返回 500,由下次清理处理。
  • 设置了代理环境变量时,本地执行 npm run deploy 不再因为 Wrangler 输出的代理提示而报“无法核对已有 KV”。
  • 修正德语和意大利语中“收起”的翻译。

一键部署仓库的升级入口

一键部署导入仓库时不会复制 .github/workflows,所以这类仓库里没有 Sync Upstream 工作流。现在提供一个十几行的短入口 .github/sync-upstream-entry.yml,由它调用上游的 Sync Upstream 工作流,以后不用再更新。升级指南给出了预先填好内容的 GitHub“新建文件”链接,把其中的 OWNER/REPO 换成自己的仓库,打开后提交即可。

一键部署表单还会额外创建一个 KV 命名空间(默认名为 2fa),它不会被绑定。Worker 实际使用首次部署时创建的 <Worker 名称>-secrets-kv。删除空的命名空间前,请按部署指南确认数据在哪一个里。

浏览器扩展 1.2.0

本次附带的 Chrome、Edge、Firefox 扩展版本为 1.2.0,与主程序独立编号。

  • 新增 Firefox Android 支持(153 及以上)。Edge Android 和 Firefox Android 的触控界面随屏幕调整,按钮更大。
  • “记住账户”和“在此页面自动填充”合并为“以后在此网站自动填入 某账户”:勾选后点击“填充”,会记住该账户,并在同一次点击中请求此网站的访问权限,允许后开启此网站的自动填充。自动填充仍不会默认开启。
  • 自动填充改为按网站授权,覆盖同一网站的所有页面;HTTP 页面(包括内网地址)现在也可以开启。旧版本的页面授权保持原样,不会自动扩大。
  • 新增 PayPal、AWS、OpenAI 等 25 个常见服务官方登录页的账户匹配。
  • 改进验证码框识别,更好地区分短信、邮件验证码与验证器验证码;不会再向已离开或已关闭的页面填入验证码。

详见扩展 1.2.0 更新说明。各浏览器商店上架 1.2.0 之前,可以下载本页附件手动安装。

文档

  • 14 种语言的 README 移到了 docs/<语言代码>/README.md,例如英文版为 docs/en/README.md。原来的 README_EN.md 等链接已失效。
  • 开发指南和 API 参考删除了项目并不支持的 Steam 验证码,以及计划中的 Webhook、GraphQL 占位说明。

升级方法

⚠️ 部署生效的前后各约一分钟内,不要修改账户:不要新增、编辑、删除或导入账户,也不要复制 HOTP 验证码。新版本切换时会从 SECRETS_KV 接手数据,而刚写入 KV 的修改可能要约一分钟才能在各地读到;这段时间内的修改,可能覆盖掉切换前一刻的那次修改。

  1. 升级前导出数据备份,并确认已妥善保存原 ENCRYPTION_KEY。
  2. 一键部署用户:仓库里还没有 Sync Upstream 时,先按升级指南补上入口。然后打开 Actions → Sync Upstream → Run workflow,选择上游 main 或本次发布标签 v1.11.0。工作流会带入 SECRETS_STORE 绑定和创建它的迁移,无需手动操作。
  3. 命令行部署用户:先提交或用 git stash 暂存本地改动,执行 git pull 后用 git diff ORIG_HEAD HEAD -- wrangler.toml 查看本次拉取带来的配置变化(只运行 git diff wrangler.toml 看不到上游的变化),确认保留了上游新增的 SECRETS_STORE 绑定和 [[migrations]];用过 git stash 的再执行 git stash pop,然后执行 npm install 和 npm run deploy。
  4. 部署完成后稍等约一分钟,刷新网页,确认显示 1.11.0。

升级继续使用现有的 Worker、KV 和密钥,不需要删除或重建实例。已在测试账号上验证 v0.1.0 至 v1.10.0 的各个版本升级到本版本:账户、HOTP 计数器、升级前的登录状态和旧备份都保持不变。

回滚限制

1.11.0 起部署会创建 Durable Object SecretsStore,而 Cloudflare 不允许跨越 Durable Object 类的变更回滚,所以 Dashboard 的 Deployments 页面无法回到 1.11.0 之前的版本。

需要回滚时,按回滚到 1.11.0 之前的版本用命令行部署旧版本,并在旧版本的 wrangler.toml 末尾加上删除这个类的迁移 rollback-1;之后再升级时追加 restore-1。账户数据始终完整保存在 SECRETS_KV 中,回滚不会丢失账户。回滚和再次升级时,同样请在切换前后各约一分钟内不要修改账户。

发布附件

worker.js、worker.metadata.json 和 DEPLOY.md 用于单文件 Worker 部署和版本核对。直接粘贴 worker.js 部署不会创建 SECRETS_STORE,同时修改的保护只在同一个实例内生效,见上文。另附扩展 1.2.0 的安装包,可下载后自行安装。所有附件均从 v1.11.0 标签源码构建。

  • 2fa-extension-chrome-1.2.0.zip、2fa-extension-edge-1.2.0.zip:解压后,在 chrome://extensions 或 edge://extensions 打开“开发者模式”,点击“加载已解压的扩展程序”(Edge 为“加载解压缩的扩展”),选择解压出的文件夹,也就是直接包含 manifest.json 的那一层。之后不要删除或移动这个文件夹。
  • 2fa-extension-firefox-1.2.0.zip:未经 Mozilla 签名,正式版 Firefox 只能临时载入。打开 about:debugging#/runtime/this-firefox,点击“临时载入附加组件”,直接选择这个 zip 文件;浏览器重启后需重新载入。长期使用或在 Android 上使用,请从 Firefox 附加组件商店安装。

手动安装的扩展不会自动更新,从商店安装可自动获得更新。Chrome / Edge 手动加载的扩展与商店版分别保存设置;Firefox 安装包与商店版是同一个附加组件,临时载入后,在浏览器重启前会代替商店版。

完整变更