gpt4 book ai didi

auth0 - 如何使用 Cypress 和 Auth0 测试单页应用程序

转载 作者:行者123 更新时间:2023-12-03 23:09:25 25 4
gpt4 key购买 nike

我有一个隐藏在 Auth0 锁后面的单页应用程序,使用 @auth0/auth0-spa-js .我想用Cypress来测试它,所以我决定关注官方Auth0 blog post ,以及约翰尼赖利 blog post .

我能够使用建议的请求从 auth0 成功检索有效的 JWT token 。我不知道该怎么办:(

我面临的问题是,上述两种方法都依赖于应用程序在本地存储 JWT token (在 cookie 或 localstorage 中)。 @auth0/auth0-spa-js然而,使用不同的方法,我假设所有相关的 cookie/localstorage 都存储在 auth0 域中。

你有什么想法,如果有办法绕过它吗?

报告了类似的问题 here 2018 年 7 月提出,并没有真正提供任何解决方案

最佳答案

我在 @auth0/auth0-spa-js 上发现了一个已解决的问题github。 approachcwmrowe 建议似乎正在工作

解决方案是模拟 oauth/token 的响应在 e2e 测试端生成 token 的端点。

这种方法似乎对我们有用

我正在复制示例代码 cwmrowe提供了

Cypress.Commands.add(
'login',
(username, password, appState = { target: '/' }) => {
cy.log(`Logging in as ${username}`);
const options = {
method: 'POST',
url: Cypress.env('Auth0TokenUrl'),
body: {
grant_type: 'password',
username,
password,
audience: Cypress.env('Auth0Audience'),
scope: 'openid profile email',
client_id: Cypress.env('Auth0ClientId'),
client_secret: Cypress.env('Auth0ClientSecret')
}
};
cy.request(options).then(({ body }) => {
const { access_token, expires_in, id_token } = body;

cy.server();

// intercept Auth0 request for token and return what we have
cy.route({
url: 'oauth/token',
method: 'POST',
response: {
access_token,
expires_in,
id_token,
token_type: 'Bearer'
}
});

// Auth0 SPA SDK will check for value in cookie to get appState
// and validate nonce (which has been removed for simplicity)
const stateId = 'test';
const encodedAppState = encodeURI(JSON.stringify(appState));
cy.setCookie(
`a0.spajs.txs.${stateId}`,
`{%22appState%22:${encodedAppState}%2C%22scope%22:%22openid%20profile%20email%22%2C%22audience%22:%22default%22}`
);

const callbackUrl = `/auth/callback?code=test-code&state=${stateId}`;
return cy.visit(callbackUrl);
});
}
);

declare namespace Cypress {
interface Chainable<Subject> {
login(
username: string,
password: string,
appState?: any
): Chainable<Subject>;
}
}

关于auth0 - 如何使用 Cypress 和 Auth0 测试单页应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59664721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com