cypress - SSO 重定向后如何通过基本身份验证?
问题描述
我是赛普拉斯和 JS 的新手。如果未登录,我正在测试的应用程序将重定向到存根 IDP 页面。该应用程序也落后于基本身份验证。我在测试中所做的只是
cy.visit("https://username:password@app_url.com")
这会将我重定向到我单击登录按钮的存根 IDP 页面
cy.contains('button', 'Log in').click()
. 这将重定向回应用程序主页。
但是,在重定向时,它提示我再次填写基本身份验证。有没有办法传递重定向后记住的基本身份验证标头?
存根 IDP 用于基于 SAML 的 SSO,工作量太大,或者我应该说我缺乏创建服务器请求以获取身份验证令牌的知识。所以现在寻找一个简单的解决方法。
解决方案
我遇到了同样的问题,我刚刚解决了它cy.intercept()
!
您必须cy.intercept
在新的重定向 URL 上使用并将基本授权标头添加到请求中。
生成基本的身份验证头,您可以在此处生成它:https ://www.blutter.se/utils/basic-authentication-header-generator/
找到目标 URL,为您提供应用主页。
- 也许有几个重定向,你可以在打开模式下运行测试时找到最后一个带有基本身份验证的重定向,取消弹出窗口后,你会在运行器中看到这个
- “新网址”是您想要的
- 在测试中,
intercept()
在单击按钮之前添加命令。将授权标头添加到传出请求中,该请求在重定向测试时触发。
cy.intercept(`<TARGET_URL>`, (req) => {
req.headers['Authorization'] = `<BASIC_AUTH_HEADER_VALUE>`;
});
在这里您可以阅读更多关于将标头添加到传出请求和拦截功能的信息: https ://docs.cypress.io/api/commands/intercept#Adding-a-header-to-an-outgoing-request
推荐阅读
- oracle - Oracle SQL 枚举替换(不在 Pl SQL 中)
- angular - 如何将元素传递给另一个组件(最简单的方法)?
- android - Firebase 事件参数混淆
- python - 如何通过pyspark中的列将行添加到另一个数据框中的数据框中
- c++ - 有人可以帮我解决这个问题,即找到总和为 k 的数组元素对的索引吗?
- amazon-web-services - 为什么 Appsync 订阅不适用于对象输入参数?
- php - Yii2 rest api getBodyParams() 无法获取参数加载(Yii::$app->getRequest()->getBodyParams(), ''); 来自反应原生帖子
- hibernate - 春天/休眠。操作实体引用损坏的 FK(有意)
- qt - QProgressBar 中的十进制值
- java - Maven 检测到错误的 java 路径