Cha*_*wis 5 javascript reactjs auth0 cypress
我正在尝试为 Cypress 创建登录命令,并注意到他们关于如何执行此操作的博客与Auth0 React SDK的预期值不匹配。看起来他们使用了自定义的 Express 应用程序来处理登录,而不是使用 SDK 来处理登录(根据官方 Auth0 文档)。
Cypress官方文档生成了一个本地存储键值对,如下所示。
const item = {
body: {
decodedToken: {
claims,
user: { ... },
audience,
client_id,
},
},
expiresAt: exp,
}
window.localStorage.setItem('auth0Cypress', JSON.stringify(item))
Run Code Online (Sandbox Code Playgroud)
然而,由 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))
Run Code Online (Sandbox Code Playgroud)
我能够使https://${auth)_domain}/oauth/token请求正常工作,但是无法弄清楚如何从响应中获取数据,以使其适合 Auth0 React SDK 想要的数据结构。
有人在这方面取得过成功吗?
经过一番探索后,我收到的响应似乎/oauth/token并不包含 Auth0 React SDK 登录时输出的值的所有字段。
我还注意到Auth0 有一个关于如何与 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();
});
});
});
Run Code Online (Sandbox Code Playgroud)
您必须确保您传入的配置与您在 Auth0 Provider 中使用的配置完全相同。
需要注意的一件事让我绊倒,那就是我也在使用刷新令牌。如果是这种情况,请确保添加offline_access到您的范围中。
我有一个公共存储库来下载工作解决方案 - https://github.com/charklewis/auth0-cypress。
| 归档时间: |
|
| 查看次数: |
3997 次 |
| 最近记录: |