Next.js + Redux身份验证和重定向

时间:2019-12-05 10:50:17

标签: react-redux next.js redux-thunk

我开始构建next.js应用程序,并且正在使用redux。 我在next.js中,特别是在redux中,阅读了很多有关身份验证的内容。 假设我有一个/ login页面和/ private页面。 而且我的redux存储包含isAuthenticated状态。 因此,正如我所看到的,我需要考虑以下情形:

  1. 通过地址栏(SSR)导航到/ private时,我应该重定向到/ login。

  2. 当已经在/ private中并且isAuthenticated更改为false时。

  3. 在/ login中成功登录后,更新isAuthenticated状态并重定向到/ private页面。

我是否错过了一些重要的可能情况(UX和安全方面)?

关于这些情况,我对这里的专家有几个疑问:

  1. 对于场景1,我在getinitialprops中实现了身份验证检查(仅当ctx.req不为null时)。如果用户未通过身份验证,我将302响应将其重定向到/ login页面。可以吗?

  2. 关于场景2,我应该在哪里实现此逻辑?最佳做法是什么?我可以想到在getinitialprops中,在render()函数中,在componentDidUpdate中实现检查...

  3. 我应该在调用redux操作(进行身份验证)之后还是在redux操作中重定向?

  4. 我应该从redux操作内部还是在组件的handle函数中触发登录请求,并成功调用redux操作。

  5. 重定向时,我应该使用Router.push还是Router.replace?

请帮助我一劳永逸地了解最佳做法。

1 个答案:

答案 0 :(得分:0)

这是基于经验的:

  1. 对于场景1,我在getinitialprops中实现了身份验证检查(仅当ctx.req不为null时)。如果用户未通过身份验证,我将302响应将其重定向到/ login页面。可以吗?

是的,可以。它会执行所需的操作。

  1. 关于场景2,我应该在哪里实现此逻辑?最佳做法是什么?我可以想到在getinitialprops中,在render()函数中,在componentDidUpdate中实现检查...

绝对是getInitialProps。我们所做的是创建了一个可以供SSR和CSR组件使用的助手。助手所做的是,它访问两个实例的Cookie,这样,身份验证状态是一致的。可能有更好的方法,但这就是我们的实现方式。

  1. 我应该在调用redux操作(进行身份验证)之后还是在redux操作中重定向?

取决于您团队的协议。对我们来说,所有重定向等副作用都可以在Redux Sagas内部进行。

  1. 我应该从redux操作内部还是在组件的handle函数中触发登录请求,并成功调用redux操作。

我建议您使用Sagas,因为它更加清洁,并为您提供了另一层功能来保持所有副作用。但是,对于您而言,我建议您保持动作清洁,并按照需要做:更改状态。

  1. 重定向时,我应该使用Router.push还是Router.replace?

我建议使用Router.push。使用replace将覆盖路由栈的顶部,并且在回击或不回击时可能导致不良影响。如果您担心回弹时会发生什么,这将取决于您的要求。

不要使事情复杂化。在使事情真正起作用之后,使其发挥作用并找到更好的方法。