我有一个登录页面,如果登录成功并返回accessToken,它会重定向到专用/panel
页面。我正在使用Redux存储来检查privateRoute组件中的令牌。
我面临的问题:
-
我想使用退出图标实现从
/panel
页面注销。如果我试图在组合的减速器中添加另一个减速器,我会得到TypeScript错误。 -
从退出图标实现注销的最佳方式是什么?我应该使用相同的
tokenReducer
在交换机中添加LOGOUT
机箱吗?需要以某种方式删除存储中的accessToken。对于删除状态中的有效负载,我应该使用筛选器吗?但具体在哪里呢? -
由于我使用的是persistent,accessToken保留在本地存储中。因此,即使我重新加载codesandbox(或终止并在localhost中重新运行我的应用程序(,下次,我甚至可以在不登录的情况下访问
/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
是返回的字符串。如果有人能复制沙盒并指导我,那就太好了。
对于"在哪里存储令牌"部分:正如我们所知,我们通常在cookie中存储sessionID
或其他东西作为服务器的标识符,以保持用户的会话。如果我们需要存储一些其他令牌,大多数情况下我们仍然使用cookie,比如laravel和axios如何处理csrf-token
:存储在cookie中,在发送xhr请求时在标头中发送,或者将其作为表单中的隐藏输入(这样它就可以与其他表单字段一起发送(。
不要完全理解问题的其他部分,但是,我想说,只要它们干净、可读、易于维护,就可以随心所欲地构建您的redux存储代码。