【发布时间】:2021-07-17 05:21:10
【问题描述】:
我正在尝试为赛普拉斯创建登录命令,并注意到他们关于如何执行此操作的博客与 Auth0 React SDK 的预期值不匹配。看来他们已经使用自定义快速应用程序来处理登录而不是使用 SDK 来处理此问题(根据 offical Auth0 documentation)。
Cypress 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 关于如何与赛普拉斯集成,但它不使用此 SDK,而是使用 SPA SDK。该指南还使用了自定义登录表单,我使用的是 LockUI。
需要注意的一点是,我没有使用后端进行身份验证(就像在大多数示例中一样)。我按照官方推荐使用loginWithRedirect登录。
【问题讨论】:
-
本指南中使用的 SKD 与推荐的 React SDK 不同。它使用了诸如
checkSession()之类的 API,这些 API 在官方 React SDK 中没有公开。 -
不用担心 checkSession。您不必显式调用它。 Auth0 React SDK 只是 atuh0 spa sdk 的包装器,因此它一直隐式调用 checkSession(例如,当您创建客户端时)。当您使用令牌重定向到回调时,如果您在 Auth0 React SDK 中正确设置了所有内容,您的 sdk 将设置所有必需的 cookie 和存储属性。
-
您还可以使用 lockUI 完成整个 Lock 工作流程,请参见此处的示例 github.com/auth0/auth0-spa-js/blob/…
标签: javascript reactjs cypress auth0