我开始构建next.js应用程序,并且正在使用redux。我在next.js中,特别是在redux中,阅读了很多有关身份验证的内容。假设我有一个/ login页面和/ private页面。而且我的redux存储包含isAuthenticated状态。因此,正如我所看到的,我需要考虑以下情形:
通过地址栏(SSR)导航到/ private时,我应该重定向到/ login。
当已经在/ private中并且isAuthenticated更改为false时。
在/ login中成功登录后,更新isAuthenticated状态并重定向到/ private页面。
我是否错过了一些重要的可能方案(UX和安全方面)?
关于这些情况,我对这里的专家有几个问题:
对于场景1,我在getinitialprops中实现了身份验证检查(仅当ctx.req不为null时)。如果用户未通过身份验证,我将302响应将其重定向到/ login页面。那样行吗?
关于方案2,我应该在哪里实现此逻辑?最佳做法是什么?我可以想到在getinitialprops,render()函数,componentDidUpdate中实现检查...
我应该在调用redux操作(身份验证)之后还是在redux操作中重定向?
我应该从redux操作内部还是在组件的handle函数中触发登录请求,并成功调用redux操作。
重定向时,我应该使用Router.push还是Router.replace?
请帮助我一劳永逸地了解最佳做法。
这基于经验:
是的,没关系。它做了它需要做的。
绝对是getInitialProps。我们所做的是为SSR和CSR组件都可以使用的助手。助手所做的是,它访问两个实例的Cookie,这样,身份验证状态是一致的。可能会有更好的方法,但这就是我们实施的方法。
取决于您团队的协议。对我们来说,所有重定向等副作用都可以在Redux Sagas内部进行。
我建议您使用Sagas,因为它更加清洁,并为您提供了另一层层次来保持您的所有副作用。但是,对于您而言,我建议您使动作保持清洁,并做它需要做的事情:更改状态。
我建议Router.push
。使用replace将覆盖路由栈的顶部,并且在回击或不回击时可能导致不良影响。如果您担心回弹时会发生什么,这将取决于您的要求。
不要使事情过于复杂。在实际使事情工作之后,使它工作并找到更好的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句