You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成可团队复用的测试用户2FA二维码?

当然可以实现!核心思路是让测试用户使用固定不变的2FA密钥(secret),只要团队全员都基于这个统一的密钥生成令牌,就能共享登录权限。下面是具体的实现方案和注意事项:

实现方案

1. 生成并固定测试用户的2FA密钥

首先,你需要为测试用户生成一个固定的、可复用的2FA密钥,而不是每次初始化数据库时动态生成。这样无论数据库重置多少次,测试用户的2FA密钥都保持一致。

用speakeasy生成固定密钥的代码示例:

const speakeasy = require('speakeasy');

// 只需要运行一次这段代码,生成后把密钥保存到测试配置/数据中
const testUserSecret = speakeasy.generateSecret({
  length: 20,
  issuer: '你的应用名称',
  label: '测试用户(test@example.com)'
}).base32;

// 输出并保存这个密钥,后续所有场景都复用它
console.log('测试用户固定2FA密钥:', testUserSecret);

划重点:不要每次启动服务或初始化数据库都重新生成密钥!把生成好的testUserSecret硬编码到测试逻辑里即可。

2. 基于固定密钥生成共享二维码

有了固定密钥后,我们可以生成标准的OTP认证URI(所有主流2FA工具都能识别的格式),再用qrcode库转换成二维码。这个二维码可以共享给团队所有成员,扫码后就能获取和测试用户一致的2FA令牌。

代码示例:

const qrcode = require('qrcode');
const speakeasy = require('speakeasy');

// 复用之前生成的固定密钥
const testUserSecret = '这里填入你生成的固定base32密钥';
const issuer = '你的应用名称';
const username = 'test@example.com';

// 构建符合标准的OTP认证URI
const otpAuthUri = speakeasy.otpauthURL({
  secret: testUserSecret,
  label: `${issuer}:${username}`,
  issuer: issuer,
  algorithm: 'sha1', // 必须和你验证2FA时的算法一致
  digits: 6, // 必须和你验证2FA时的位数一致
  period: 30 // 必须和你验证2FA时的周期一致
});

// 方式1:在控制台输出二维码(方便快速测试)
qrcode.toString(otpAuthUri, { type: 'terminal' }, (err, qrCode) => {
  if (err) console.error(err);
  console.log('\n测试用户共享二维码(控制台版):');
  console.log(qrCode);
});

// 方式2:保存为图片文件(方便团队成员扫码)
qrcode.toFile('./test-user-2fa-qr.png', otpAuthUri, (err) => {
  if (err) console.error(err);
  console.log('共享二维码已保存到 test-user-2fa-qr.png');
});

3. 测试环境初始化时复用密钥

在你的测试数据库初始化逻辑中,确保测试用户的2FA字段使用上面的固定密钥,而不是动态生成:

// 测试用户初始化逻辑示例
async function initTestDatabase() {
  const testUser = {
    email: 'test@example.com',
    password: '测试专用密码',
    twoFactorSecret: '这里填入固定的testUserSecret' // 固定密钥,不要动态生成
  };
  // 将测试用户写入数据库...
}
关键注意事项
  • 仅限测试环境使用:这种共享密钥的方式绝对不能用于生产环境!生产环境每个用户必须拥有独立、不共享的2FA密钥,否则会造成严重的安全漏洞。
  • 密钥保密:即使是测试环境,也不要把这个密钥和二维码公开到团队外部渠道。
  • 参数一致性:生成URI时的algorithm、digits、period参数,必须和你验证2FA令牌时的参数完全一致,否则令牌会验证失败。

这样处理后,团队成员扫码这个固定二维码,就能获取测试用户的2FA令牌,实现共享登录啦!

内容的提问来源于stack exchange,提问作者Daniel Kaplan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:17:04