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

如何使用Cypress绕过Google Authenticator 2FV完成网站登录?

绕过Google Authenticator双因素认证的Cypress测试方案

针对你的Cypress登录测试需求,这里提供几种可行的绕过Google Authenticator 2FA的方案,按推荐优先级排序:

1. 使用测试环境专属的2FA白名单/固定验证码

绝大多数正规系统会为测试环境提供专属的2FA简化机制,比如给测试账号设置固定不变的验证码,或者直接跳过2FA校验。这是最安全且符合测试规范的方案。

修改你的测试代码示例(假设测试环境固定验证码为123456):

describe('empty spec', () => {
  it('passes', () => {
    cy.visit('website')
    cy.get('[data-selenium-id="email"]').click()
    cy.get('[name="email"]').type("test_mail@example.com")
    cy.get('[name="password"]').type("TestPass123")
    cy.get('[data-selenium-id="signInForm.signInButton"]').click()
    
    // 输入测试环境固定2FA验证码
    cy.get('[name="totp-code"]').type("123456") // 替换为实际测试环境的固定码
    cy.get('[data-selenium-id="verify-button"]').click() // 替换为实际验证按钮的选择器
  })
})

2. 基于TOTP算法实时计算验证码

Google Authenticator采用TOTP(基于时间的一次性密码)算法,只要你能拿到测试账号对应的2FA密钥(secret),就可以用工具库计算出实时有效的验证码。

步骤:

  1. 安装TOTP计算库:
npm install speakeasy --save-dev
  1. 修改测试代码(注意密钥不要硬编码,用环境变量管理):
const speakeasy = require('speakeasy');

describe('empty spec', () => {
  it('passes', () => {
    cy.visit('website')
    cy.get('[data-selenium-id="email"]').click()
    cy.get('[name="email"]').type("test_mail@example.com")
    cy.get('[name="password"]').type("TestPass123")
    cy.get('[data-selenium-id="signInForm.signInButton"]').click()
    
    // 从环境变量获取2FA密钥,避免硬编码泄露
    const totpSecret = Cypress.env('TOTP_SECRET');
    // 计算当前有效的TOTP验证码
    const token = speakeasy.totp({
      secret: totpSecret,
      encoding: 'base32' // Google Authenticator的密钥默认是base32编码
    });
    
    // 输入验证码完成登录
    cy.get('[name="totp-code"]').type(token)
    cy.get('[data-selenium-id="verify-button"]').click()
  })
})
  • 配置环境变量:在cypress.config.js或.env文件中设置TOTP_SECRET的值,确保密钥不被提交到版本控制系统。

3. 通过后端API跳过2FA校验

如果你的团队有权限修改后端逻辑,可以为测试环境的登录接口添加跳过2FA的参数,或者直接为测试账号设置自动跳过2FA的规则,然后通过API登录绕过前端的2FA页面。

示例代码:

describe('empty spec', () => {
  it('passes via API login', () => {
    // 直接调用后端登录接口,传入跳过2FA的参数
    cy.request({
      method: 'POST',
      url: '/api/auth/login', // 替换为实际登录接口地址
      body: {
        email: "test_mail@example.com",
        password: "TestPass123",
        skip_2fa: true // 假设后端支持该参数
      }
    }).then((response) => {
      // 将登录后的认证令牌设置到Cookies中
      cy.setCookie('auth_token', response.body.access_token);
      // 直接跳转至需要登录的页面,无需走前端登录流程
      cy.visit('/dashboard');
    })
  })
})

4. 复用已登录的Cookies缓存

手动完成一次完整的登录(包括2FA验证),然后导出浏览器的登录Cookies,在测试中直接导入这些Cookies,跳过整个登录流程。

示例代码:

describe('empty spec', () => {
  beforeEach(() => {
    // 导入手动登录后获取的Cookies
    cy.setCookie('auth_token', 'your_valid_auth_token');
    cy.setCookie('user_session', 'your_valid_session_id');
    // 根据实际系统的Cookies名称添加更多项
  })

  it('passes with cached cookies', () => {
    cy.visit('/dashboard');
    // 直接执行后续的测试逻辑
  })
})
  • 注意:Cookies有有效期,过期后需要重新手动获取更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:31:00