赛普拉斯:登录身份验证重定向到另一个域:解决方法?

时间:2020-08-29 19:57:42

标签: authentication redirect cypress

我了解赛普拉斯不允许从一个域切换到另一个域,因为它将出现以下错误:

chrome-error://chromewebdata/

但是,我需要一种解决方法。我正在为多个环境提供测试集:STAGE,DEMO,PROD。

使用 DEMO PROD ,在身份验证阶段(用户名/密码),保持在同一域内:

  • 访问https://[demo|www].foo.com
  • AUTH https://account.foo.com/auth >>用户名>>密码
  • 同意https://[demo|www].foo.com/action...

通过 STAGE ,身份验证阶段转到另一个域:

  • 访问https://[stage].foo.com
  • AUTH https://account.bar.com/auth >>用户名>>密码
  • 同意https://[stage].foo.com/action...

因此,由于域翻转,赛普拉斯无法从访问重定向到 AUTH 。这阻止了对 STAGE 的测试。

推荐的解决方法是什么?

  • 木偶?
  • 使用cy.request()的本地Cypress吗?

参考:

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我采用的方法类似于赛普拉斯的Login with CSRF token方案

如前所述,每个部署都有自己的网站URL ,后跟帐户登录URL

首先需要帐户登录页面上的CSRF令牌,其URL在这里称为$baseUrl

Cypress.Commands.add('cmdGetCSRF', ($baseUrl) => {
    cy.log('COMMAND cmdGetCSRF');

    expect($baseUrl)
        .to.be.a('string')
        .not.empty

    cy.request($baseUrl)
        .its('body')
        .then(($body) => {
            const $html = Cypress.$($body)

            cy.log('html', $html)

            const csrf = $html.find('input[name="__RequestVerificationToken"]').val()

            expect(csrf)
                .to.be.a('string')
                .not.empty

            return cy.wrap(csrf)
        })
})

然后在body的{​​{1}}中提供给requestOptions并执行一次登录,并提供一次性CSRF令牌:

cy.request()