使用 Redux+TypeScript 实现注销

IT技术 javascript reactjs typescript redux react-redux
2021-05-21 12:00:26

我有一个登录页面,/panel如果登录成功并返回一个 accessToken ,它会重定向到一个私人页面。我正在使用 Redux 商店来检查 privateRoute 组件中的令牌。

我面临的问题:

  • 我想/panel使用退出图标实现从页面注销如果我尝试在组合减速器中添加另一个减速器,则会出现 TypeScript 错误。

  • 从退出图标实现注销的最佳方法是什么?我应该在开关中使用相同的tokenReducer添加LOGOUT案例吗?商店中的 accessToken 需要以某种方式删除。要删除状态中的有效负载,我应该使用过滤器吗?但具体在哪里?

  • 由于我使用了持久化,所以 accessToken 保留在本地存储中。因此,即使我重新加载代码和框(或终止并在本地主机中重新运行我的应用程序),下一次,我/panel无需登录就可以访问

代码沙盒:

https://codesandbox.io/s/frosty-shannon-0ivez?file=/src/store/reducers/index.ts

邮箱:c@c.com

密码:检查

唯一的主要区别是,在原始代码中,我没有手动编写 accessToken,而是运行了 GraphQL 突变。如果登录成功,则返回一个 accessToken 并发送如下:

 dispatch({ type: 'LOGIN', payload: data.loginEmail.accessToken });

哪里loginEmail是突变,accessToken是返回的字符串。如果有人可以复制沙盒并指导我,那就太好了。

1个回答

对于“在哪里存储令牌”部分:正如我们所知,我们通常sessionID在 cookie 中存储一个或其他东西作为服务器的标识符以保持用户的会话。如果我们需要存储一些其他的令牌,大多数情况下我们仍然使用 cookie,就像laravelaxios 的处理方式csrf-token:存储在 cookie 中,在发送 xhr 请求时将其发送到 header 中,或者将其作为隐藏输入放置在表单中(因此它得到与其他表单字段一起发送)。

不太明白问题的其他部分,但是,我想说的是,按照您的喜好构建您的 redux 存储代码,只要它们干净、可读、易于维护。