我正在使用基于令牌的身份验证,并想知道如何在Relay Modern中将它完全绑定在一起。我已经过了一半。任何帮助深表感谢。这是我的设置:
<App />
内的顶层我渲染<QueryRenderer />
入口点。<LoginPage />
内部组件中,我有一个表单,可在提交时触发 LoginUserMutation 。当我提供有效的用户名和密码组合时,我会收到一个令牌:
localStorage.setItem('token', token)
/dashboard
history.push('/dashboard')
路线
createRelayEnvironment.js
内部 fetchQuery 我定义了如何向GraphQL后端发出网络请求:
const token = localStorage.getItem('token');
{ ..., 'authorization': 'Bearer ${token}' }
。然后,后端可以对用户进行身份验证。如前所述,假设您在 LoginUserMutation 中,突变已成功并且您在onComplete
回调中获得了有效的令牌。现在该怎么办?是的我将它存储在localStorage
内。但是如果我将用户重定向到<Dashboard />
组件,我就搞砸了。为什么? - 仪表板组件需要受限数据。当应用程序首次初始化时,虽然未提供受限数据,因为没有令牌被发送到GraphQL端点。稍后当令牌最终在 LoginUserMutation 中可用时,Relay实际上并没有对它做任何事情。
TL;博士
Q1
在将用户发送到<Dashboard />
之前,我如何 - 配备有效令牌 - 触发/dashboard
组件所需数据的重新获取。
Q2
使用JSON Web令牌(JWT)时,是否有更好的方法来处理带Relay的身份验证?特别是,如果您在 LoginUserMutation 的onComplete
回调中收到有效令牌,该怎么办?
答案 0 :(得分:0)
在验证用户身份时,重新创建中继环境。 您将删除任何现有缓存。这是建议的,因为你的缓存应该根据登录的用户而有所不同,所以完全删除它是正常的。
的伪代码:
ConcurrentLinkedQueue
答案 1 :(得分:0)
经过一些修补后发现了一些可行的解决方案。我需要更改我的代码以包含以下内容。检查一下:https://github.com/apollographql/apollo-fetch
它可以通过Fetch来解决middlleware的问题。
更新:我试图让它运作但却没有成功。