gpt4 book ai didi

javascript - 使用 Cypress 进行 Auth0 身份验证

转载 作者:行者123 更新时间:2023-12-04 13:53:16 28 4
gpt4 key购买 nike

我正在尝试为 Cypress 创建一个登录命令,并注意到他们关于如何执行此操作的博客与 Auth0 React SDK 的预期值不匹配。 .看来他们使用自定义 express 应用程序来处理登录,而不是使用 SDK 来处理此问题(根据 offical Auth0 documentation )。
柏树 official documentation生成如下所示的本地存储键值对。

const item = {
body: {
decodedToken: {
claims,
user: { ... },
audience,
client_id,
},
},
expiresAt: exp,
}

window.localStorage.setItem('auth0Cypress', JSON.stringify(item))
然而,由 Auth0 React SDK 创建的生成类似于:
const item = {
body: {
access_token,
audience,
client_id,
decodedToken: {
claims,
user: { ... },
encoded,
header
},
expires_in,
id_token,
scope,
token_type
},
expiresAt: exp
}

window.localStorage.setItem(`@@auth0spajs@@::${client_id}::${audience}::${scope}`, JSON.stringify(item))
我可以获得 https://${auth)_domain}/oauth/token请求工作,但是我无法弄清楚如何从响应中获取数据,使其适合 Auth0 react SDK 想要的数据结构。
有没有人在这方面取得过任何成功?

在做了一些探索之后,似乎我从 /oauth/token 得到了回复。不包含 Auth0 React SDK 在登录时输出的值的所有字段。
我也注意到 Auth0 has a guide关于如何与 Cypress 集成,但它不使用此 SDK,而是使用 SPA SDK。该指南还使用自定义登录表单,我在其中使用了 LockUI。
需要注意的一件事是我没有使用后端进行身份验证(就像在大多数示例中一样)。我用的是 loginWithRedirect按照官方建议登录。

最佳答案

经过 Auth0 团队的一些调查和帮助,我成功地完成了这项工作。
这是我使用的代码:

Cypress.Commands.add("login", () => {
cy.clearLocalStorage();

const email = "";
const password = "";
const client_id = "";
const client_secret = "";
const audience = "";
const scope = "";

cy.request({
method: "POST",
url: "",
body: {
grant_type: "password",
username: email,
password,
audience,
scope,
client_id,
client_secret,
},
}).then(({ body: { access_token, expires_in, id_token, token_type } }) => {
cy.window().then((win) => {
win.localStorage.setItem(
`@@auth0spajs@@::${client_id}::${audience}::${scope}`,
JSON.stringify({
body: {
client_id,
access_token,
id_token,
scope,
expires_in,
token_type,
decodedToken: {
user: JSON.parse(
Buffer.from(id_token.split(".")[1], "base64").toString("ascii")
),
},
audience,
},
expiresAt: Math.floor(Date.now() / 1000) + expires_in,
})
);
cy.reload();
});
});
});
你必须确保你传入的配置是 正好与您在 Auth0 Provider 中使用的配置相同。
有一次要注意的是,我还使用了刷新 token 。如果是这种情况,请确保添加 offline_access到你的范围。
我有一个公共(public)存储库来下载一个有效的解决方案 - https://github.com/charklewis/auth0-cypress .

关于javascript - 使用 Cypress 进行 Auth0 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67222522/

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