881 字
4 分钟

【实战记录】基于 Cloudflare Workers 搭建个人专属 2FA 验证码服务

前言#

我一直想把 2FA 验证码从“单手机绑定”改成“浏览器可访问”的方式。

原因很现实:手机丢了、坏了或重置了,验证码可能直接断档。与其被动补救,不如提前把服务搭在自己可控的云端。

最终我选了开源项目 2fa-authenticator,底层是 Cloudflare Workers + KV

  • 轻量省心:部署简单,免费额度对个人使用足够。
  • 数据可控:密钥存在自己的 KV,不依赖第三方托管平台。
  • 跨端可用:浏览器可登录查看,设备切换更从容。

官方有一键部署入口,但实际操作里有几个容易踩的坑。下面按顺序把可复用的流程写清楚。


准备工作#

  • GitHub 账号(用于创建和管理仓库)
  • Cloudflare 账号(用于部署 Workers 与管理 KV)

Step 1:发起一键部署(先别急着点到底)#

  1. 打开项目仓库:zhifu1996/2fa-authenticator
  2. 点击 README 里的 Deploy to Cloudflare Workers
  3. 授权 GitHub 后会进入部署配置页面

注意:到这一步先停一下,先做 Step 2 的配置,再点击最终 Deploy。否则大概率会直接报错。


Step 2:先做两项关键配置#

这是成败分水岭,建议逐项确认。

2.1 勾选创建新仓库#

  • 配置项:Create new repository
  • 原因:后续若要改配置(例如 wrangler.toml),必须有自己的仓库才能快速修复并自动触发重部署。

2.2 手动填写 Build Command#

常见问题是构建命令为空,导致 Worker 找不到前端静态资源,出现类似: assets.directory ... does not exist

建议填写:

Terminal window
cd web && npm install && npm run build

Build output directory 则确认指向构建产物目录(通常是 web/dist,以项目实际配置为准)。

配置完成后再点击 Deploy


Step 3:处理域名路由报错(Fatal Error)#

如果你看到类似错误: [ERROR] Could not find zone for '2fa.xxxx.eu.org'

基本可以确定是仓库里写了作者自己的路由配置,而你的账号并不拥有该域名。

处理方式:

  1. 进入刚创建的 GitHub 仓库
  2. 打开根目录 wrangler.toml
  3. 删除底部 [[routes]] 相关配置(包含 patterncustom_domain 等)
  4. 提交变更

Cloudflare 检测到提交后会自动重新部署,通常这一步就能恢复为 Success。


Step 4:启用 workers.dev 访问地址#

部署成功后,如果你发现没有可访问链接,可以手动开启:

  1. Cloudflare Dashboard → Workers & Pages → 进入项目
  2. SettingsTriggers
  3. workers.dev 区域点击 Enable

启用后会得到一个形如: https://your-project.your-name.workers.dev 的访问地址。


Step 5:配置管理员密码#

默认不设置管理员变量,你将无法进入管理页添加 2FA 条目。

配置路径:

  1. 项目页面 → SettingsVariables and Secrets
  2. 新增变量:
    • Name: ADMIN_PASSWORD
    • Type: Secret
    • Value: 你的高强度密码
  3. 保存并重新部署

使用建议#

  • 首次登录:访问你的 workers.dev 地址,点击“管理”,输入管理员密码。
  • 备份策略:定期导出 2FA Secret 作为离线备份,避免单点故障。
  • 进一步加固:可以叠加 Cloudflare Access(Zero Trust)再做一层身份验证。

结语#

Cloudflare Workers + KV 很适合这类“轻量、低频、重可用”的个人工具。

把 2FA 放到自己可控的服务里,不是为了“折腾”,而是为了在设备出问题时,仍然有稳定的恢复路径。

如果你也在做图床、短链、Webhook 网关之类的小服务,这套部署思路同样可以直接复用。

【实战记录】基于 Cloudflare Workers 搭建个人专属 2FA 验证码服务
https://wujiaqiao.ccwu.cc/posts/2fa/
作者
Lollipop
发布于
2026-01-29
许可协议
CC BY-NC-SA 4.0
最后更新于 2026-01-29,距今已过 31 天

部分内容可能已过时

评论区

目录