国内某些安卓系统手机无法安装谷歌商店,以及需要科学上网,或者需要下载 Authenticator 的 APK 文件安装,才可以使用动态码。
并且我之前有使用过 otplib
写过一个基于命令行的动态码工具 (opens new window)的经验,所以复刻了一个 Authenticator 的小程序,支持 Authenticator 的导出二维码,以及扫描二维码添加动态码。
# 实现
UI 方面直接使用 Cursor AI 对话生成界面,但是使用的是 uniapp
的框架,所以需要更改一些代码。因为习惯 tailwind
,所以使用一个启动模板 (opens new window)让 uniapp 支持 tailwind
。生成式 AI 几乎帮我完成了 90% 的界面代码。
使用 otplib/browser
来实现 otp 的生成。
支持导入谷歌 Authenticator 的二维码是最浪费时间的部分,因为导出的信息是 URI
形式,需要使用 protobuf
解析出 secret 和 issuer 还有 label 信息, 要支持 protobuf 解析,需要使用 protobufjs
,而且需要 static code 而不是 reflection .proto
文件。所以需要将 .proto
文件静态编译为 .js
文件,而且还要解决 js module 的引入问题,这里使用 protobufjs-cli (opens new window) 解决。
附上 github 仓库 (opens new window)

可以扫码体验: